o
    P                    @   s   d dl mZmZmZmZ d dlmZ d dlT d dlm	Z	m
Z
mZmZmZ 	 g dZd	Zd
Zd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S )    )print_functionabsolute_importdivisionunicode_literals)MarkedYAMLError)*)utf8unichrPY3check_anchorname_charnprintF)AnyDictOptionalListUnionText)VersionType)ScannerRoundTripScannerScannerErroru   
   u    
 	   	c                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   </tmp/google-cloud-sdk/lib/third_party/ruamel/yaml/scanner.pyr   1   s    r   c                   @   s   e Zd Zdd ZdS )	SimpleKeyc                 C   s(   || _ || _|| _|| _|| _|| _d S N)token_numberrequiredindexlinecolumnmark)selfr   r    r!   r"   r#   r$   r   r   r   __init__8   s   
zSimpleKey.__init__N)r   r   r   r&   r   r   r   r   r   5   s    r   c                   @   s  e Zd ZdddZedd Zdd Zedd	 Zed
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5dfdg Z6dhdi Z7djdk Z8dldm Z9dndo Z:dpdq Z;drds Z<dtdu Z=dvdw Z>dxdy Z?dzd{ Z@dd}d~ZAdd ZBdd ZCdd ZDdd ZEdd ZFi ddddddddddddddddddddddddddddddddddddiZGddddZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdS )r   Nc                 C   s<   || _ | j durt| j dddu r| | j _|   d| _dS )zInitialize the scanner.N_scannerF)loadergetattrr'   reset_scanner
first_time)r%   r(   r   r   r   r&   C   s
   
zScanner.__init__c                 C   s
   t | jS r   )lenflow_contextr%   r   r   r   
flow_levelU   s   
zScanner.flow_levelc                 C   s<   d| _ g | _g | _|   d| _d| _g | _d| _i | _d S )NFr   T)	doner-   tokensfetch_stream_starttokens_takenindentindentsallow_simple_keypossible_simple_keysr.   r   r   r   r*   Z   s   
zScanner.reset_scannerc                 C   sD   z| j W S  ty!   t| jdr| jj| _ n| jj| _ | j  Y S w Ntyp)_scanner_readerAttributeErrorhasattrr(   reader_readerr.   r   r   r   r>      s   

zScanner.readerc                 C   s   t | jdr| jjjS | jjS r9   )r=   r(   resolverprocessing_versionr.   r   r   r   scanner_processing_version   s   
z"Scanner.scanner_processing_versionc                 G   sN   |   r|   |   st| jr%|sdS |D ]}t| jd |r$ dS qdS NTr   F)need_more_tokensfetch_more_tokensboolr2   
isinstancer%   choiceschoicer   r   r   check_token   s   
zScanner.check_tokenc                 C   s0   |   r|   |   st| jr| jd S d S Nr   )rD   rE   rF   r2   r.   r   r   r   
peek_token   s   

zScanner.peek_tokenc                 C   s@   |   r|   |   st| jr|  jd7  _| jdS d S N   r   )rD   rE   rF   r2   r4   popr.   r   r   r   	get_token   s   
zScanner.get_tokenc                 C   s2   | j rdS | js
dS |   |  | jkrdS dS )NFT)r1   r2   stale_possible_simple_keysnext_possible_simple_keyr4   r.   r   r   r   rD      s   zScanner.need_more_tokensc                 C   s   t r   )NotImplementedError)r%   commentr   r   r   fetch_comment   s   zScanner.fetch_commentc                 C   s  |   }|d ur| |S |   | | jj | j }|dkr%|  S |dkr1|  r1| 	 S |dkr=| 
 r=|  S |dkrI|  rI|  S |dkrQ|  S |dkrY|  S |dkra|  S |dkri|  S |d	krq|  S |dkr}|  r}|  S |d
kr|  r|  S |dkr|  r|  S |dkr|  S |dkr|  S |dkr|  S |dkr| js|  S |dkr| js|  S |dkr|  S |dkr|   S | ! r| " S t#dd dt$| | j% )N %-.[{]},?:r   &!|>'"z!while scanning for the next tokenz.found character %r that cannot start any token)&scan_to_next_tokenrV   rR   unwind_indentr>   r#   peekfetch_stream_endcheck_directivefetch_directivecheck_document_startfetch_document_startcheck_document_endfetch_document_endfetch_flow_sequence_startfetch_flow_mapping_startfetch_flow_sequence_endfetch_flow_mapping_endfetch_flow_entrycheck_block_entryfetch_block_entry	check_key	fetch_keycheck_valuefetch_valuefetch_aliasfetch_anchor	fetch_tagr/   fetch_literalfetch_foldedfetch_singlefetch_doublecheck_plainfetch_plainr   r   get_mark)r%   rU   chr   r   r   rE      sh   

	
zScanner.fetch_more_tokensc                 C   s6   d }| j D ]}| j | }|d u s|j|k r|j}q|S r   )r8   r   )r%   min_token_numberlevelkeyr   r   r   rS   F  s   	

z Scanner.next_possible_simple_keyc                 C   sb   t | jD ])}| j| }|j| jjks| jj|j dkr.|jr*td|jd| j | j|= qd S )Ni   while scanning a simple keycould not find expected ':')	listr8   r"   r>   r!   r    r   r$   r   )r%   r   r   r   r   r   rR   V  s   
 z"Scanner.stale_possible_simple_keysc                 C   sl   | j  o
| j| jjk}| jr4|   | jt| j }t	||| jj
| jj| jj| j }|| j| j < d S d S r   )r/   r5   r>   r#   r7   remove_possible_simple_keyr4   r,   r2   r   r!   r"   r   r8   )r%   r    r   r   r   r   r   save_possible_simple_keyj  s   z Scanner.save_possible_simple_keyc                 C   sF   | j | jv r!| j| j  }|jrtd|jd| j | j| j = d S d S )Nr   r   )r/   r8   r    r   r$   r>   r   )r%   r   r   r   r   r     s   z"Scanner.remove_possible_simple_keyc                 C   sR   t | jrd S | j|kr'| j }| j | _| jt	|| | j|ksd S d S r   )
rF   r/   r5   r>   r   r6   rP   r2   appendBlockEndToken)r%   r#   r$   r   r   r   ri     s   


zScanner.unwind_indentc                 C   s&   | j |k r| j| j  || _ dS dS )NTF)r5   r6   r   )r%   r#   r   r   r   
add_indent  s
   
zScanner.add_indentc                 C   s(   | j  }| jt||| j jd d S )N)encoding)r>   r   r2   r   StreamStartTokenr   r%   r$   r   r   r   r3     s   
zScanner.fetch_stream_startc                 C   sD   |  d |   d| _i | _| j }| jt|| d| _	d S )Nr0   FT)
ri   r   r7   r8   r>   r   r2   r   StreamEndTokenr1   r   r   r   r   rk     s   


zScanner.fetch_stream_endc                 C   s,   |  d |   d| _| j|   d S )Nr0   F)ri   r   r7   r2   r   scan_directiver.   r   r   r   rm     s   
zScanner.fetch_directivec                 C      |  t d S r   )fetch_document_indicatorDocumentStartTokenr.   r   r   r   ro        zScanner.fetch_document_startc                 C   r   r   )r   DocumentEndTokenr.   r   r   r   rq     r   zScanner.fetch_document_endc                 C   sN   |  d |   d| _| j }| jd | j }| j||| d S )Nr0   F   )ri   r   r7   r>   r   forwardr2   r   )r%   
TokenClass
start_markend_markr   r   r   r     s   


z Scanner.fetch_document_indicatorc                 C      | j tdd d S )Nr[   to_push)fetch_flow_collection_startFlowSequenceStartTokenr.   r   r   r   rr        z!Scanner.fetch_flow_sequence_startc                 C   r   )Nr\   r   )r   FlowMappingStartTokenr.   r   r   r   rs     r   z Scanner.fetch_flow_mapping_startc                 C   sN   |    | j| d| _| j }| j  | j }| j||| d S NT)r   r-   r   r7   r>   r   r   r2   )r%   r   r   r   r   r   r   r   r     s   


z#Scanner.fetch_flow_collection_startc                 C   r   r   )fetch_flow_collection_endFlowSequenceEndTokenr.   r   r   r   rt   
  r   zScanner.fetch_flow_sequence_endc                 C   r   r   )r   FlowMappingEndTokenr.   r   r   r   ru     r   zScanner.fetch_flow_mapping_endc                 C   sd   |    z| j }W n	 ty   Y nw d| _| j }| j  | j }| j	||| d S NF)
r   r-   rP   
IndexErrorr7   r>   r   r   r2   r   )r%   r   poppedr   r   r   r   r   r     s   


z!Scanner.fetch_flow_collection_endc                 C   sB   d| _ |   | j }| j  | j }| jt|| d S r   )r7   r   r>   r   r   r2   r   FlowEntryToken)r%   r   r   r   r   r   rv   %  s   


zScanner.fetch_flow_entryc                 C   s   | j s&| jstd d d| j | | jjr%| j }| jt	|| n	 d| _| 
  | j }| j  | j }| jt|| d S )Nz%sequence entries are not allowed hereT)r/   r7   r   r>   r   r   r#   r2   r   BlockSequenceStartTokenr   r   BlockEntryTokenr%   r$   r   r   r   r   r   rx   1  s    



zScanner.fetch_block_entryc                 C   s   | j s%| jstd d d| j | | jjr%| j }| jt	|| | j  | _| 
  | j }| j  | j }| jt|| d S )Nz!mapping keys are not allowed here)r/   r7   r   r>   r   r   r#   r2   r   BlockMappingStartTokenr   r   KeyTokenr   r   r   r   rz   M  s   




zScanner.fetch_keyc                 C   s  | j | jv r>| j| j  }| j| j = | j|j| j t|j|j | j s:| |j	r:| j|j| j t
|j|j d| _n1| j sN| jsNtd d d| j | j sf| | jj	rf| j }| jt
|| | j  | _|   | j }| j  | j }| jt|| d S )NFz#mapping values are not allowed here)r/   r8   r2   insertr   r4   r   r$   r   r#   r   r7   r   r>   r   r   r   r   
ValueToken)r%   r   r$   r   r   r   r   r   r|   i  s>   







zScanner.fetch_valuec                 C   $   |    d| _| j| t d S r   )r   r7   r2   r   scan_anchor
AliasTokenr.   r   r   r   r}        zScanner.fetch_aliasc                 C   r   r   )r   r7   r2   r   r   AnchorTokenr.   r   r   r   r~     r   zScanner.fetch_anchorc                 C   "   |    d| _| j|   d S r   )r   r7   r2   r   scan_tagr.   r   r   r   r     s   zScanner.fetch_tagc                 C      | j dd d S )Nrd   stylefetch_block_scalarr.   r   r   r   r        zScanner.fetch_literalc                 C   r   )Nre   r   r   r.   r   r   r   r     r   zScanner.fetch_foldedc                 C   s$   d| _ |   | j| | d S r   )r7   r   r2   r   scan_block_scalarr%   r   r   r   r   r     s   zScanner.fetch_block_scalarc                 C   r   )Nrf   r   fetch_flow_scalarr.   r   r   r   r     r   zScanner.fetch_singlec                 C   r   )Nrg   r   r   r.   r   r   r   r     r   zScanner.fetch_doublec                 C   s$   |    d| _| j| | d S r   )r   r7   r2   r   scan_flow_scalarr   r   r   r   r     r   zScanner.fetch_flow_scalarc                 C   r   r   )r   r7   r2   r   
scan_plainr.   r   r   r   r     s   zScanner.fetch_plainc                 C   s   | j jdkrdS d S )Nr   T)r>   r#   r.   r   r   r   rl     s   zScanner.check_directivec                 C   4   | j jdkr| j ddkr| j dtv rdS d S )Nr   r   ---Tr>   r#   prefixrj   _THE_END_SPACE_TABr.   r   r   r   rn         zScanner.check_document_startc                 C   r   )Nr   r   ...Tr   r.   r   r   r   rp      r   zScanner.check_document_endc                 C   s   | j dtv S )NrO   )r>   rj   r   r.   r   r   r   rw     s   zScanner.check_block_entryc                 C   s   t | jrdS | jdtv S )NTrO   )rF   r/   r>   rj   r   r.   r   r   r   ry     s   
zScanner.check_keyc                 C   s   | j dkrt| jrdS n/t| jr<| jd dkr%| jdtvr#dS dS | jr:t| jd t	r:| jdtvr:dS dS | jdtv S )NrO   rO   Tr0   r[   rO   F)
rB   rF   r/   r-   r>   rj   r   r2   rG   r   r.   r   r   r   r{     s   


zScanner.check_valuec                 C   s   | j j}| }| jdkr"|dvp!|dtvo!|dkp!| j o!|dv S |dvr(dS |d}|dkr6|tvr6dS |dkrEt| jrE|tvrEdS |dtvoV|dkpV| j oV|dv S )Nr   u      	
  -?:,[]{}#&*!|>'"%@`rO   rY   z?:Tra   )r>   rj   rB   r   r/   rF   
_SPACE_TAB)r%   srpr   ch1r   r   r   r   (  s"   
zScanner.check_plainc                 C   s   | j j}| j j}| j jdkr| dkr|  d}t}|sJ| dkr)|  | dks!| dkr;| |vr;|  | |vs3|  rF| jsEd| _nd}|rd S )Nr      ﻿F #T)r>   rj   r   r!   _THE_ENDscan_line_breakr/   r7   )r%   r   srffound_the_endr   r   r   rh   M  s*   




zScanner.scan_to_next_tokenc                 C   s   | j j}| j j}| j  }|  | |}d }|dkr&| |}| j  }n!|dkr5| |}| j  }n| j  }| tvrG|  | tvs?| | t	||||S )NYAMLTAG)
r>   rj   r   r   scan_directive_namescan_yaml_directive_valuescan_tag_directive_valuer   scan_directive_ignored_lineDirectiveToken)r%   r   r   r   namevaluer   r   r   r   r   t  s$   







zScanner.scan_directivec                 C   s  d}| j j}||}d|  krdks/n d|  krdks/n d|  kr*dks/n |dv r\|d	7 }||}d|  krAdks/n d|  krLdks/n d|  krWdks/n |dv s/|sltd
|dt| | j  | j |}| j | | }|dvrtd
|dt| | j  |S )Nr   09AZazz-_:.rO   while scanning a directive6expected alphabetic or numeric character, but found %r     
  )r>   rj   r   r   r   r   r   )r%   r   lengthr   r   r   r   r   r   r     s2   JJ

zScanner.scan_directive_namec                 C   s   | j j}| j j}| dkr|  | dks| |}| dkr.td|dt|  | j  |  | |}| dvrJtd|dt|  | j  ||fS )Nr   rZ   r   z%expected a digit or '.', but found %rr   z%expected a digit or ' ', but found %r)r>   rj   r   scan_yaml_directive_numberr   r   r   )r%   r   r   r   majorminorr   r   r   r     s.   





z!Scanner.scan_yaml_directive_valuec                 C   s   | j j}| j j}| }d|  krdks$n td|dt| | j  d}d||  kr2dkrEn n|d7 }d||  krDdks4n t| j |}|| |S )Nr   r   r   zexpected a digit, but found %rr   rO   )r>   rj   r   r   r   r   intr   )r%   r   r   r   r   r   r   r   r   r   r     s"   
z"Scanner.scan_yaml_directive_numberc                 C   s`   | j j}| j j}| dkr|  | dks| |}| dkr'|  | dks| |}||fS )Nr   )r>   rj   r   scan_tag_directive_handlescan_tag_directive_prefix)r%   r   r   r   handler   r   r   r   r     s   





z Scanner.scan_tag_directive_valuec                 C   s>   |  d|}| j }|dkrtd|dt| | j |S )N	directiver   r   expected ' ', but found %r)scan_tag_handler>   rj   r   r   r   r%   r   r   r   r   r   r   r        

z!Scanner.scan_tag_directive_handlec                 C   s>   |  d|}| j }|dvrtd|dt| | j |S )Nr   r   r   r   )scan_tag_urir>   rj   r   r   r   r   r   r   r   r     r   z!Scanner.scan_tag_directive_prefixc                 C   s   | j j}| j j}| dkr|  | dks| dkr'| tvr'|  | tvs| }|tvr<td|dt| | j  |   d S )Nr   r   r   0expected a comment or a line break, but found %rr>   rj   r   r   r   r   r   r   )r%   r   r   r   r   r   r   r   r     s$   





z#Scanner.scan_directive_ignored_linec           
      C   s   | j j}| j  }| }|dkrd}nd}| j   d}||}t|r0|d7 }||}t|s$|sCtd|f |dt| | j  | j |}| j | |dvrdtd|f |dt| | j  | j  }	||||	S )	Nr   aliasanchorr   rO   zwhile scanning an %sr   u     	
  ?:,[]{}%@`)r>   rj   r   r   r   r   r   r   )
r%   r   r   r   	indicatorr   r   r   r   r   r   r   r   r     s>   





zScanner.scan_anchorc           
      C   s<  | j j}| j  }|d}|dkr9d }| j d | d|}| dkr3td|dt|  | j  | j   nA|tv rGd }d}| j   n3d}d	}|d
vrb|dkrVd}n|d7 }||}|d
vsOd}|rm| d|}nd}| j   | d|}| }|d
vrtd|dt| | j  ||f}| j  }	t	|||	S )NrO   <   tagre   zwhile parsing a tagzexpected '>', but found %rrc   Fr   Tzwhile scanning a tagr   )
r>   rj   r   r   r   r   r   r   r   TagToken)
r%   r   r   r   r   suffixr   
use_handler   r   r   r   r   r   @  sZ   




zScanner.scan_tagFc                 C   s  | j j}|dkrd}nd}g }| j  }| j   | |\}}| |}	| jd }
|d u rQ|
dk rD|dvsB| jdkrDt| j	ddrDd}
| 
 \}}}t|
|}n|
dk rWd}
|
| d }| |\}}d}| j j|kr| d	kr|| | d
v}d}||tvr|d7 }||tvs|| j | | j | |  }| |\}}|dv r|
dkr|  s|  rn?| j j|kr| d	kr|r|r|dkr|d |r|dkr|r| d
vr|s|d n|| nn| j j|kr| d	ksqg }|dv r|| |du r|| n
|dv r|| td|d|||}|	d ur.||	g t|dkr]|  }|rJ||d  |  }|s<| j  }td|||}|| |S )Nre   TFrO   z|>r   0top_level_block_style_scalar_no_indent_error_1_1 rW   r   r   
r   r   r   )r>   rj   r   r   scan_block_scalar_indicatorsscan_block_scalar_ignored_liner5   rB   r)   r(   scan_block_scalar_indentationmaxscan_block_scalar_breaksr#   extendr   r   r   r   rn   rp   ScalarTokenjoinadd_pre_commentsr,   rh   CommentTokenadd_post_comment)r%   r   rtr   foldedchunksr   chomping	incrementblock_scalar_comment
min_indentbreaks
max_indentr   r5   
line_breakleading_non_spacer   trailingtokenrU   comment_end_markr   r   r   r   r  s   








-







zScanner.scan_block_scalarc                 C   s
  | j j}d }d }| }|dv r<|dkrd}nd}| j   | }|dv r;t|}|dkr6td|d| j  | j   n0|dv rlt|}|dkrRtd|d| j  | j   | }|dv rl|dkred}nd}| j   | }|d	vrtd|d
t| | j  ||fS )Nz+-+TF
0123456789r   while scanning a block scalarz<expected indentation indicator in the range 1-9, but found 0r   z9expected chomping or indentation indicators, but found %r)r>   rj   r   r   r   r   r   )r%   r   r   r  r  r   r   r   r   r    s\   




z$Scanner.scan_block_scalar_indicatorsc                 C   s   | j j}| j j}d}d }| dkr|| 7 }|  | dks| dkr7|}| tvr7|| 7 }|  | tvs*| }|tvrLtd|dt| | j  |   |S )Nr
  r   r   r(  r   r   )r%   r   r   r   r   rU   r   r   r   r   r    s0   







z&Scanner.scan_block_scalar_ignored_linec                 C   s~   | j j}| j j}g }d}| j  }| dv r:| dkr(||   | j  }n|  | j j|kr5| j j}| dv s|||fS )Nr       
  r   )r>   rj   r   r   r   r   r#   )r%   r   r   r  r   r   r   r   r   r  /  s   




z%Scanner.scan_block_scalar_indentationc                 C   s   g }| j j}| j j}| j  }| j j|k r(| dkr(|  | j j|k r(| dks| dv rW||   | j  }| j j|k rR| dkrR|  | j j|k rR| dksD| dv s-||fS )Nr   
   
  )r>   rj   r   r   r#   r   r   )r%   r5   r  r   r   r   r   r   r   r  A  s   



z Scanner.scan_block_scalar_breaksc                 C   s   |dkrd}nd}| j j}g }| j  }| }| j   || || | |krA|| || || || | |ks*| j   | j  }td|d|||S )Nrg   TFr
  )	r>   rj   r   r   r  scan_flow_scalar_non_spacesscan_flow_scalar_spacesr  r  )r%   r   doubler   r  r   quoter   r   r   r   r   Q  s    





zScanner.scan_flow_scalarr   rW   r   r  bt	nr  vfrer   rg   /\N   _    Lu    Pu    r        )xuUc           
   	   C   s  g }| j j}| j j}	 d}||dvr|d7 }||dvs|dkr.|| j | || | }|sG|dkrG|ddkrG|d |d n|rM|dksS|s\|dv r\|| |  n|r|dkr|  | }|| jv ry|| j|  |  nc|| jv r| j| }|  t|D ]}||d	vrtd
|d|t	||f | j 
 qt| j |d}	|t|	 || n"|dv r|   || || ntd
|dt	| | j 
 |S q)NTr   u    
'"\ 	  rO   rf   r  z"\r=  0123456789ABCDEFabcdefz%while scanning a double-quoted scalarz?expected escape sequence of %d hexdecimal numbers, but found %r   u
   
  z!found unknown escape character %r)r>   rj   r   r   r   ESCAPE_REPLACEMENTSESCAPE_CODESranger   r   r   r   r	   r   r  scan_flow_scalar_breaks)
r%   r-  r   r  r   r   r   r   kcoder   r   r   r+    sh   







z#Scanner.scan_flow_scalar_non_spacesc           
      C   s   | j j}g }d}||dv r|d7 }||dv s| j |}| j | | }|dkr5td|d| j  |dv r[|  }| ||}	|dkrM|| n|	sT|d	 |	|	 |S || |S )
Nr   r   rO   rW   while scanning a quoted scalarzfound unexpected end of streamr*  r  r   )
r>   rj   r   r   r   r   r   rN  r   r  )
r%   r-  r   r   r  r   whitespacesr   r!  r  r   r   r   r,    s6   


zScanner.scan_flow_scalar_spacesc                 C   s   g }| j j}| j j}	 | j d}|dks|dkr)|dtv r)td|d| j  | dv r6|  | dv s.| dv rC||   n|S q)	NTr   r   r   rQ  z#found unexpected document separatorr   r*  )	r>   rj   r   r   r   r   r   r   r   )r%   r-  r   r  r   r   r   r   r   r   rN    s&   


zScanner.scan_flow_scalar_breaksc                 C   s  | j j}| j j}g }| j  }|}| jd }g }	 d}| dkr!n	 ||}	|	dkr3||d tvr3n%|	dkr=| jdkr=n|	tv sW| jsP|	dkrP||d tv sW| jrX|	dv rXn|d7 }q"| jr{|	dkr{||d d	vr{|| td
|d| j  d|dkrn2d| _	|
| || j | || | j  }| ||}|r| dks| js| j j|k rnqtd|d||}
|r|d dkrtd|d ||}|
| |
S )NrO   Tr   r   ra   r`   r   z,:?[]{}u     	
  ,[]{}zwhile scanning a plain scalarzfound unexpected ':'zGPlease check http://pyyaml.org/wiki/YAMLColonInFlowContext for details.Fr
  r  )r>   rj   r   r   r5   r   rB   r/   r   r7   r  r   r   scan_plain_spacesr#   r  r  r  r  )r%   r   r   r  r   r   r5   spacesr   r   r$  rU   r   r   r   r     sz   


	


4
zScanner.scan_plainc                 C   s>  | j j}| j j}g }d}||dv r|d7 }||dv s| j |}| j | | }|dv r|  }	d| _| j d}
|
dksD|
dkrL|dtv rLd S g }| d	v r~| dkr\|  n||   | j d}
|
dksq|
dkry|dtv ryd S | d	v sS|	d
kr||	 n|s|d || |S |r|| |S )Nr   r   rO   r*  Tr   r   r   r)  r  )	r>   rj   r   r   r   r7   r   r   r  )r%   r5   r   r   r   r  r   rR  r   r!  r   r  r   r   r   rS  :  sD   





zScanner.scan_plain_spacesc                 C   sJ  | j j}| }|dkrtd|f |dt| | j  d}||}|dkrd|  kr0dksKn d|  kr;d	ksKn d
|  krFdksKn |dv rx|d7 }||}d|  kr]dksKn d|  krhd	ksKn d
|  krsdksKn |dv sK|dkr| j | td|f |dt| | j  |d7 }| j |}| j | |S )Nrc   while scanning a %szexpected '!', but found %rrO   r   r   r   r   r   r   r   z-_)r>   rj   r   r   r   r   r   )r%   r   r   r   r   r   r   r   r   r   r   `  s8   
JJ
zScanner.scan_tag_handlec                 C   sT  | j j}g }d}||}d|  krdks1n d|  kr!dks1n d|  kr,dks1n |dv r}|d	krP|| j | | j | d}|| || n|d
7 }||}d|  krbdks1n d|  krmdks1n d|  krxdks1n |dv s1|dkr|| j | | j | d}|std|f |dt| | j  d	|S )Nr   r   r   r   r   r   r   z-;/?:@&=+$,_.!~*'()[]%rX   rO   zwhile parsing a %szexpected URI, but found %rr
  )
r>   rj   r   r   r   scan_uri_escapesr   r   r   r  )r%   r   r   r   r  r   r   r   r   r   r     s>   


zScanner.scan_tag_uric           
   
   C   s  | j j}| j j}g }| j  }| dkr]|  tdD ]}||dvr6td|f |dt|| | j  qtrF|t	| j 
dd n|tt	| j 
dd |d | dksztrjt|d}W |S td|d}W |S  ty }	 ztd|f |t|	|d }	~	ww )	NrX   r  rI  rU  zBexpected URI escape sequence of 2 hexdecimal numbers, but found %rrJ  zutf-8    )r>   rj   r   r   rM  r   r   r
   r   r   r   chrbytesdecodeunicoder  UnicodeDecodeErrorstr)
r%   r   r   r   r   
code_bytesr$   rO  r   excr   r   r   rV    s@   



zScanner.scan_uri_escapesc                 C   sZ   | j  }|dv r | j ddkr| j d dS | j   dS |dv r+| j   |S dS )N   
r  
r       r
  r>   rj   r   r   )r%   r   r   r   r   r     s   



zScanner.scan_line_breakr   F)Rr   r   r   r&   propertyr/   r*   r>   rB   rK   rM   rQ   rD   rV   rE   rS   rR   r   r   ri   r   r3   rk   rm   ro   rq   r   rr   rs   r   rt   ru   r   rv   rx   rz   r|   r}   r~   r   r   r   r   r   r   r   r   rl   rn   rp   rw   ry   r{   r   rh   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   rK  rL  r+  r,  rN  r   rS  r   r   rV  r   r   r   r   r   r   B   s    

6

p	=					%'/
2p3	
6M&!# r   c                   @   sP   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdddZ	dddZ
dS )r   c                 G   sV   |   r|   |   s|   t| jr)|sdS |D ]}t| jd |r( dS qdS rC   )rD   rE   _gather_commentsrF   r2   rG   rH   r   r   r   rK     s   
zRoundTripScanner.check_tokenc                 C   s8   |   r|   |   s|   t| jr| jd S d S rL   )rD   rE   rf  rF   r2   r.   r   r   r   rM     s   

zRoundTripScanner.peek_tokenc                 C   s   g }| j s|S t| j d tr!| j d}|  jd7  _|| |  rL|   | j s.|S t| j d trH|  jd7  _| j d}|| |  s%t|dkrZ| j d 	| | j
sjt| j dk rl|   dS dS dS )zcombine multiple comment linesr   rO   r  N)r2   rG   r  rP   r4   r   rD   rE   r,   r  r1   )r%   commentsrU   r   r   r   rf    s*   

	z!RoundTripScanner._gather_commentsc                 C   s   |   r|   |   s|   t| jr^t| jdkrQt| jd ttt	t
frQt| jd trQ| jd jj| jd jjkrQ|  jd7  _| jd | jd |  jd7  _| jdS d S rN   )rD   rE   rf  rF   r2   r,   rG   r  r   r   r   r  r   r"   r   r4   r  rP   r.   r   r   r   rQ     s&   

zRoundTripScanner.get_tokenc                 C   sN   |\}}}|r|d dkr|d d }|r|d dks| j t||| d S )Nr0   r   )r2   r   r  )r%   rU   r   r   r   r   r   r   rV   (  s
   
zRoundTripScanner.fetch_commentc                 C   s  | j j}| j j}| j jdkr| dkr|  d}|s| dkr'|  | dks| }|dkrw| j  }|}|  |tvrO| }|dkrDn||7 }|  |tvs<|  }t|dkrg||7 }|  }t|dksY| j  }| jsrd| _	|||fS t
|  r| j  }| jsd| _	| }|dkr| j  }d	}|r| jdd
}||7 }|s| dkr|ddd d }| j  }|||fS nd}|rd S )Nr   r   Fr   r   rW   Tr  r
  )
empty_linerO   )r>   rj   r   r!   r   r   r   r,   r/   r7   rF   rsplit)r%   r   r   r   r   r   rU   r   r   r   r   rh   3  sd   









)z#RoundTripScanner.scan_to_next_tokenFc                 C   st   | j  }|dv r | j ddkr| j d dS | j   dS |dv r+| j   |S |r8|dv r8| j   |S dS )Nr`  r  ra  r  rb  z	 r
  rc  )r%   rh  r   r   r   r   r   x  s   




z RoundTripScanner.scan_line_breakTc                 C   s   t j| ||dS )N)r  )r   r   )r%   r   r  r   r   r   r     r   z"RoundTripScanner.scan_block_scalarNrd  )T)r   r   r   rK   rM   rf  rQ   rV   rh   r   r   r   r   r   r   r     s    

Er   N)
__future__r   r   r   r   ruamel.yaml.errorr   ruamel.yaml.tokensruamel.yaml.compatr   r	   r
   r   r   typingr   r   r   r   r   r   r   __all__r   r   r   r   objectr   r   r   r   r   r   r   <module>   s4                &