B
    |?_[(                 @   s|   d dl mZ d dlZd dlmZmZmZmZ d dlm	Z	m
Z
mZmZ d dlmZ ddgZG dd deZG d	d deZdS )
    )absolute_importN)	YAMLErrorFileMark
StringMarkYAMLStreamError)	text_typebinary_typePY3UNICODE_SIZE)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   1lib/python3.7/site-packages/ruamel_yaml/reader.py__init__&   s
    zReaderError.__init__c             C   sH   t | jtr,d| jt| j| j| j| jf S d| j| j| j| jf S d S )Nz>'%s' codec can't decode byte #x%02x: %s
  in "%s", position %dz8unacceptable character #x%04x: %s
  in "%s", position %d)
isinstancer   r   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 Zdd ZedkrtedZn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   J   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column)r   r   r   r   r    R   s    zReader.reset_readerc             C   s(   y| j S  tk
r"   tdY nX d S )Nzinput stream needs to specified)_streamAttributeErrorr   )r   r   r   r   r!   `   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   r   r   check_printabler%   r   r'   determine_encodinghasattrr   r   r!   r$   )r   valr   r   r   r!   h   s$    




r   c             C   sD   y| j | j|  S  tk
r>   | |d  | j | j|  S X d S )N   )r%   r&   
IndexErrorupdate)r   r)   r   r   r   peek   s
    zReader.peekr4   c             C   s4   | j | t| jkr| | | j| j | j |  S )N)r&   lenr%   r6   )r   lengthr   r   r   prefix   s    
zReader.prefixc             C   s   | j | d t| jkr&| |d  x|dkr| j| j  }|  j d7  _ |  jd7  _|dksx|dkr| j| j  dkr|  jd7  _d| _n|dkr|  jd7  _|d8 }q(W d S )Nr4   r   u	   
  
u   ﻿)r&   r8   r%   r6   r)   r*   r+   )r   r9   Zchr   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 )N)	r!   r   r   r)   r*   r+   r%   r&   r   )r   r   r   r   get_mark   s    
zReader.get_markc             C   s   x*| j s*| jd ks t| jdk r*|   qW t| jtr| jtjrVtj	| _
d| _n,| jtjrttj| _
d| _ntj| _
d| _| d d S )N   z	utf-16-lez	utf-16-bezutf-8r4   )r$   r'   r8   
update_rawr   r   
startswithcodecsBOM_UTF16_LEutf_16_le_decoder(   r   BOM_UTF16_BEutf_16_be_decodeutf_8_decoder6   )r   r   r   r   r1      s    zReader.determine_encodingr?   u   [^	
 -~ -퟿-�]u!   [^	
 -~ -퟿-�𐀀-􏿿]z	
r"          asciic             C   s@   | d}|d | j}|s d S |d d }|||dfS )NrJ   r4   )encode	translate_printable_asciir)   decode)clsdataZascii_bytesZ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 )N)NON_PRINTABLEsearchboolstartgroup)rO   rP   matchr   r   r   _get_non_printable_regex   s    zReader._get_non_printable_regexc             C   s*   y
|  |S  tk
r$   | |S X d S )N)rQ   UnicodeEncodeErrorrX   )rO   rP   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 )NZunicodez"special characters are not allowed)rZ   r)   r8   r%   r&   r   r   r   )r   rP   Znon_printable_matchrU   r   r   r   r   r   r0      s    
zReader.check_printablec          
   C   sn  | j d krd S | j| jd  | _d| _x@t| j|k rh| jsH|   | jd k	ry| | j d| j\}}W n tk
r } ztr| j |j	 }n|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 d d }~X Y nX n| j }t|}| | |  j|7  _| j |d  | _ | jr*|  jd7  _d | _ P q*W d S )Nr   strictr.   )r'   r%   r&   r8   r$   r@   r(   UnicodeDecodeErrorr	   rU   objectr!   r#   r   r   r   r   r0   )r   r9   rP   Z	convertedexcr   r   r   r   r   r6      s>    



 
zReader.updatec             C   s`   |d krt rdnd}| j|}| jd kr2|| _n|  j|7  _|  jt|7  _|s\d| _d S )Ni   i   T)r	   r!   r/   r'   r#   r8   r$   )r   sizerP   r   r   r   r@     s    
zReader.update_raw)N)r   )r4   )r4   )N)r   r   r   r   r    propertyr!   setterr7   r:   r=   r>   r1   r
   r   rR   joinmapchrrangerK   rM   classmethodrQ   rX   rZ   r0   r6   r@   r   r   r   r   r   <   s*   



 
	')Z
__future__r   rB   Zruamel_yaml.errorr   r   r   r   Zruamel_yaml.compatr   r   r	   r
   Zruamel_yaml.utilr   __all__r   r]   r   r   r   r   r   <module>   s   