o
    |*                     @   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)RegExpF)AnyDictOptionalListUnionTextTupler   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   ;/tmp/google-cloud-sdk/lib/third_party/ruamel/yaml/reader.py__init__&   s
   
zReaderError.__init__c                 C   sD   t | jtrd| jt| j| j| j| jf S d| j| j| j| jf 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dZdd Zdd Zedkr?e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 urt| j dd d u r| | j _|   || _d S )N_reader)loadergetattrr&   reset_readerstream)r   r*   r'   r   r   r   r   O   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)   W   s   
zReader.reset_readerc                 C   s    z| j W S  ty   tdw )Nzinput stream needs to specified)_streamAttributeErrorr   r!   r   r   r   r*   e   s
   zReader.streamc                 C   s   |d u rd S d | _ t|trd| _| | |d | _d S t|tr.d| _|| _|   d S t	|ds7t
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)r5   r   r   r   check_printabler.   r   r0   determine_encodinghasattrr   r(   r*   r-   )r   valr   r   r   r*   m   s$   



r   c                 C   sD   z	| j | j|  W S  ty!   | |d  | j | j|   Y S w )N   )r.   r/   
IndexErrorupdate)r   r2   r   r   r   peek   s   zReader.peekr=   c                 C   s4   | j | t| jkr| | | j| j | j |  S r   )r/   lenr.   r?   )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v s;|dkrF| j| j  dkrF|  jd7  _d| _n|dkrQ|  jd7  _|d8 }|dksd S d S )Nr=   r   u	   
  
   ﻿r/   rA   r.   r?   r2   r3   r4   r   rB   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s;|dkrF| j| j  dkrF|  jd7  _d| _n|dkrQ|  jd7  _|d8 }|dksd S d S )Nr=   r   rE   rD   rF   rG   rH   r   r   r   forward   s    zReader.forwardc                 C   s>   | j d u rt| j| j| j| j| j| jS t| j| j| j| jS r   )	r*   r   r   r2   r3   r4   r.   r/   r   r!   r   r   r   get_mark   s
   
zReader.get_markc                 C   s   | j s"| jd u st| jdk r"|   | j s"| jd u st| jdk st| jtrM| jtjr7tj	| _
d| _n| jtjrFtj| _
d| _ntj| _
d| _| d d S )N   z	utf-16-lez	utf-16-bezutf-8r=   )r-   r0   rA   
update_rawr   r   
startswithcodecsBOM_UTF16_LEutf_16_le_decoder1   r   BOM_UTF16_BEutf_16_be_decodeutf_8_decoder?   r!   r   r   r   r:      s   zReader.determine_encodingrM   u   [^	
 -~ -퟿-�]u!   [^	
 -~ -퟿-�𐀀-􏿿]z	
r+          asciic                 C   s@   | d}|d | j}|sd S |d d }|||dfS )NrX   r=   )encode	translate_printable_asciir2   decode)clsdataascii_bytesnon_printables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)r]   r^   matchr   r   r   _get_non_printable_regex   s   zReader._get_non_printable_regexc                 C   s*   z|  |W S  ty   | | Y S w r   )rb   UnicodeEncodeErrorri   )r]   r^   r   r   r   _get_non_printable   s
   zReader._get_non_printablec                 C   sN   |  |}|d ur%|\}}| jt| j| j  | }t| j|t|ddd S )Nunicodez"special characters are not allowed)rk   r2   rA   r.   r/   r   r   r    )r   r^   non_printable_matchrf   r   r   r   r   r   r9      s   
zReader.check_printablec              
   C   sh  | j d u rd S | j| jd  | _d| _t| j|k r| js!|   | jd urz| | j d| j\}}W nR ty~ } z?trD| j |j	 }n|j
|j	 }| jd ur[| jt| j  |j	 }n| jd url| jt| j  |j	 }n|j	}t| j|||j|jd }~ww | j }t|}| | |  j|7  _| j |d  | _ | jr|  jd7  _d | _ d S t| j|k sd S d S )Nr   strictr7   )r0   r.   r/   rA   r-   rN   r1   UnicodeDecodeErrorr	   rf   objectr*   r,   r   r   r   r   r9   )r   rB   r^   	convertedexcr   r   r   r   r   r?     s@   




zReader.updatec                 C   sd   |d u r
t rdnd}| j|}| jd u r|| _n|  j|7  _|  jt|7  _|s0d| _d S d S )Ni   i   T)r	   r*   r8   r0   r,   rA   r-   )r   sizer^   r   r   r   rN   %  s   

zReader.update_rawr   )r   )r=   )r#   r$   r%   r   r)   propertyr*   setterr@   rC   rJ   rK   rL   r:   r
   r   rc   joinmapchrrangerY   r[   classmethodrb   ri   rk   r9   r?   rN   r   r   r   r   r   A   s<    






	 
	

#)
__future__r   rP   ruamel.yaml.errorr   r   r   r   ruamel.yaml.compatr   r   r	   r
   ruamel.yaml.utilr   typingr   r   r   r   r   r   r   __all__r   rp   r   r   r   r   r   <module>   s   