U
    ew                    @   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 dddg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nprintScannerRoundTripScannerScannerErroru   
   u    
 	   	c                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   2lib/python3.8/site-packages/ruamel_yaml/scanner.pyr   1   s   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 ZFdddddddddddddddddddZGddddZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdS )r   Nc                 C   s<   || _ | j dk	r*t| j dddkr*| | j _|   d| _dS )zInitialize the scanner.N_scannerF)loadergetattrr    reset_scannerZ
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   sJ   z| j W S  tk
rD   t| jdr0| jj| _ n
| jj| _ | j  Y S X d S Ntyp)Z_scanner_readerAttributeErrorhasattrr!   readerZ_readerr&   r   r   r   r5      s    
zScanner.readerc                 C   s   t | jdr| jjjS | jjS r1   )r4   r!   ZresolverZprocessing_versionr&   r   r   r   scanner_processing_version   s    
z"Scanner.scanner_processing_versionc                 G   sH   |   r|   q t| jrD|s$dS |D ]}t| jd |r( dS q(dS NTr   F)need_more_tokensfetch_more_tokensboolr*   
isinstancer   choicesZchoicer   r   r   check_token   s    

zScanner.check_tokenc                 C   s*   |   r|   q t| jr&| jd S d S Nr   )r8   r9   r:   r*   r&   r   r   r   
peek_token   s    

zScanner.peek_tokenc                 C   s:   |   r|   q t| jr6|  jd7  _| jdS d S N   r   )r8   r9   r:   r*   r,   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)r)   r*   stale_possible_simple_keysnext_possible_simple_keyr,   r&   r   r   r   r8      s    zScanner.need_more_tokensc                 C   s   t d S r   )NotImplementedError)r   commentr   r   r   fetch_comment   s    zScanner.fetch_commentc                 C   s  |   }|d k	r| |S |   | | jj | j }|dkrJ|  S |dkrb|  rb| 	 S |dkrz| 
 rz|  S |dkr|  r|  S |dkr|  S |dkr|  S |dkr|  S |dkr|  S |d	kr|  S |dkr|  r|  S |d
kr|  r|  S |dkr2|  r2|  S |dkrD|  S |dkrV|  S |dkrh|  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% d S )N %-.[{]},?:r   &!|>'"z!while scanning for the next tokenz.found character %r that cannot start any token)&scan_to_next_tokenrI   rE   unwind_indentr5   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   rH   chr   r   r   r9      sh    

	






zScanner.fetch_more_tokensc                 C   s6   d }| j D ]&}| j | }|d ks*|j|k r
|j}q
|S r   )r0   r   )r   Zmin_token_numberlevelkeyr   r   r   rF   F  s    	

z Scanner.next_possible_simple_keyc                 C   sb   t | jD ]R}| j| }|j| jjks8| jj|j dkr
|jrTtd|jd| j | j|= q
d S )Ni   while scanning a simple keycould not find expected ':')	listr0   r   r5   r   r   r   r   ry   )r   r{   r|   r   r   r   rE   V  s    
 z"Scanner.stale_possible_simple_keysc                 C   sh   | j  o| j| jjk}| jrd|   | jt| j }t	||| jj
| jj| jj| j }|| j| j < d S r   )r'   r-   r5   r   r/   remove_possible_simple_keyr,   r$   r*   r   r   r   ry   r0   )r   r   r   r|   r   r   r   save_possible_simple_keyj  s    z Scanner.save_possible_simple_keyc                 C   sB   | j | jkr>| j| j  }|jr4td|jd| j | j| j = d S )Nr}   r~   )r'   r0   r   r   r   r5   ry   )r   r|   r   r   r   r     s    z"Scanner.remove_possible_simple_keyc                 C   sF   t | jrd S | j|krB| j }| j | _| jt	|| qd S r   )
r:   r'   r-   r5   ry   r.   rC   r*   appendZBlockEndToken)r   r   r   r   r   r   r\     s    


zScanner.unwind_indentc                 C   s&   | j |k r"| j| j  || _ dS dS )NTF)r-   r.   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)r5   ry   r*   r   ZStreamStartTokenr   r   r   r   r   r   r+     s    
zScanner.fetch_stream_startc                 C   sD   |  d |   d| _i | _| j }| jt|| d| _	d S )Nr(   FT)
r\   r   r/   r0   r5   ry   r*   r   ZStreamEndTokenr)   r   r   r   r   r^     s    

zScanner.fetch_stream_endc                 C   s,   |  d |   d| _| j|   d S )Nr(   F)r\   r   r/   r*   r   scan_directiver&   r   r   r   r`     s    
zScanner.fetch_directivec                 C   s   |  t d S r   )fetch_document_indicatorZDocumentStartTokenr&   r   r   r   rb     s    zScanner.fetch_document_startc                 C   s   |  t d S r   )r   ZDocumentEndTokenr&   r   r   r   rd     s    zScanner.fetch_document_endc                 C   sN   |  d |   d| _| j }| jd | j }| j||| d S )Nr(   F   )r\   r   r/   r5   ry   forwardr*   r   )r   
TokenClass
start_markend_markr   r   r   r     s    


z Scanner.fetch_document_indicatorc                 C   s   | j tdd d S )NrN   to_push)fetch_flow_collection_startZFlowSequenceStartTokenr&   r   r   r   re     s    z!Scanner.fetch_flow_sequence_startc                 C   s   | j tdd d S )NrO   r   )r   ZFlowMappingStartTokenr&   r   r   r   rf     s    z Scanner.fetch_flow_mapping_startc                 C   sN   |    | j| d| _| j }| j  | j }| j||| d S NT)r   r%   r   r/   r5   ry   r   r*   )r   r   r   r   r   r   r   r   r     s    


z#Scanner.fetch_flow_collection_startc                 C   s   |  t d S r   )fetch_flow_collection_endFlowSequenceEndTokenr&   r   r   r   rg   
  s    zScanner.fetch_flow_sequence_endc                 C   s   |  t d S r   )r   FlowMappingEndTokenr&   r   r   r   rh     s    zScanner.fetch_flow_mapping_endc                 C   sf   |    z| j }W n tk
r*   Y nX d| _| j }| j  | j }| j	||| d S NF)
r   r%   rC   
IndexErrorr/   r5   ry   r   r*   r   )r   r   Zpoppedr   r   r   r   r   r     s    


z!Scanner.fetch_flow_collection_endc                 C   sB   d| _ |   | j }| j  | j }| jt|| d S r   )r/   r   r5   ry   r   r*   r   ZFlowEntryToken)r   r   r   r   r   r   ri   %  s    


zScanner.fetch_flow_entryc                 C   s   | j sL| js td d d| j | | jjrL| j }| jt	|| n d| _| 
  | j }| j  | j }| jt|| d S )Nz%sequence entries are not allowed hereT)r'   r/   r   r5   ry   r   r   r*   r   ZBlockSequenceStartTokenr   r   ZBlockEntryTokenr   r   r   r   r   r   r   rk   1  s"       



zScanner.fetch_block_entryc                 C   s   | j sJ| js td d d| j | | jjrJ| j }| jt	|| | j  | _| 
  | j }| j  | j }| jt|| d S )Nz!mapping keys are not allowed here)r'   r/   r   r5   ry   r   r   r*   r   BlockMappingStartTokenr   r   KeyTokenr   r   r   r   rm   M  s"       




zScanner.fetch_keyc                 C   s  | j | jkr|| j| j  }| j| j = | j|j| j t|j|j | j st| |j	rt| j|j| j t
|j|j d| _nb| j s| jstd d d| j | j s| | jj	r| j }| jt
|| | j  | _|   | j }| j  | j }| jt|| d S )NFz#mapping values are not allowed here)r'   r0   r*   insertr   r,   r   r   r   r   r   r/   r   r5   ry   r   r   r   
ValueToken)r   r|   r   r   r   r   r   r   ro   i  s@    

 






zScanner.fetch_valuec                 C   s$   |    d| _| j| t d S r   )r   r/   r*   r   scan_anchorZ
AliasTokenr&   r   r   r   rp     s    zScanner.fetch_aliasc                 C   s$   |    d| _| j| t d S r   )r   r/   r*   r   r   ZAnchorTokenr&   r   r   r   rq     s    zScanner.fetch_anchorc                 C   s"   |    d| _| j|   d S r   )r   r/   r*   r   scan_tagr&   r   r   r   rr     s    zScanner.fetch_tagc                 C   s   | j dd d S )NrW   stylefetch_block_scalarr&   r   r   r   rs     s    zScanner.fetch_literalc                 C   s   | j dd d S )NrX   r   r   r&   r   r   r   rt     s    zScanner.fetch_foldedc                 C   s$   d| _ |   | j| | d S r   )r/   r   r*   r   scan_block_scalarr   r   r   r   r   r     s    zScanner.fetch_block_scalarc                 C   s   | j dd d S )NrY   r   fetch_flow_scalarr&   r   r   r   ru     s    zScanner.fetch_singlec                 C   s   | j dd d S )NrZ   r   r   r&   r   r   r   rv     s    zScanner.fetch_doublec                 C   s$   |    d| _| j| | d S r   )r   r/   r*   r   scan_flow_scalarr   r   r   r   r     s    zScanner.fetch_flow_scalarc                 C   s"   |    d| _| j|   d S r   )r   r/   r*   r   
scan_plainr&   r   r   r   rx     s    zScanner.fetch_plainc                 C   s   | j jdkrdS d S )Nr   T)r5   r   r&   r   r   r   r_     s    zScanner.check_directivec                 C   s4   | j jdkr0| j ddkr0| j dtkr0dS d S )Nr   r   ---Tr5   r   prefixr]   _THE_END_SPACE_TABr&   r   r   r   ra     s     zScanner.check_document_startc                 C   s4   | j jdkr0| j ddkr0| j dtkr0dS d S )Nr   r   ...Tr   r&   r   r   r   rc      s     zScanner.check_document_endc                 C   s   | j dtkS )NrB   )r5   r]   r   r&   r   r   r   rj     s    zScanner.check_block_entryc                 C   s   t | jrdS | jdtkS )NTrB   )r:   r'   r5   r]   r   r&   r   r   r   rl     s    
zScanner.check_keyc                 C   sZ   | j dkrt| jrJdS n0t| jrJ| jd dkrF| jdtkrFdS dS | jdtkS )NrB   rB   Tr(   rN   rB   F)r6   r:   r'   r%   r5   r]   r   r&   r   r   r   rn     s    


zScanner.check_valuec                 C   s   | j j}| }| jdkrD|dkpB|dtkoB|dkpB| j oB|dkS |dkrPdS |d}|dkrl|tkrldS |dkrt| jr|tkrdS |dtko|dkp| j o|dkS )Nr   u      	
  -?:,[]{}#&*!|>'"%@`rB   rL   z?:TrT   )r5   r]   r6   r   r'   r:   
_SPACE_TAB)r   srprz   Zch1r   r   r   rw   %  s"    
zScanner.check_plainc                 C   s   | j j}| j j}| j jdkr,| dkr,|  d}t}|s| dkrJ|  q8| dkrf| |krf|  qT|  r|| jsd| _q4d}q4d S )Nr      ﻿F #T)r5   r]   r   r   _THE_ENDscan_line_breakr'   r/   )r   r   srffoundZ_the_endr   r   r   r[   J  s"    


zScanner.scan_to_next_tokenc                 C   s   | j j}| j j}| j  }|  | |}d }|dkrL| |}| j  }n:|dkrj| |}| j  }n| j  }| tkr|  qt| | t	||||S )NZYAMLZTAG)
r5   r]   r   ry   scan_directive_namescan_yaml_directive_valuescan_tag_directive_valuer   scan_directive_ignored_lineZDirectiveToken)r   r   r   r   namevaluer   r   r   r   r   q  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rTdks^n |dkrp|d	7 }||}q|std
|dt| | j  | j |}| j | | }|dkrtd
|dt| | j  |S )Nr   09AZazz-_:.rB   while scanning a directive6expected alphabetic or numeric character, but found %r     
  )r5   r]   r   r   ry   r   r   )r   r   lengthr   rz   r   r   r   r   r     s0    J


zScanner.scan_directive_namec                 C   s   | j j}| j j}| dkr"|  q| |}| dkrTtd|dt|  | j  |  | |}| dkrtd|dt|  | j  ||fS )Nr   rM   r   z%expected a digit or '.', but found %rr   z%expected a digit or ' ', but found %r)r5   r]   r   scan_yaml_directive_numberr   r   ry   )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sHn td|dt| | j  d}d||  krddkrrn n
|d7 }qLt| j |}|| |S )Nr   r   r   zexpected a digit, but found %rr   rB   )r5   r]   r   r   r   ry   intr   )r   r   r   r   rz   r   r   r   r   r   r     s     

z"Scanner.scan_yaml_directive_numberc                 C   sP   | j j}| j j}| dkr"|  q| |}| dkr>|  q,| |}||fS )Nr   )r5   r]   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_handler5   r]   r   r   ry   r   r   r   rz   r   r   r   r     s    

z!Scanner.scan_tag_directive_handlec                 C   s>   |  d|}| j }|dkr:td|dt| | j |S )Nr   r   r   r   )scan_tag_urir5   r]   r   r   ry   r   r   r   r   r     s    

z!Scanner.scan_tag_directive_prefixc                 C   st   | j j}| j j}| dkr"|  q| dkr>| tkr>|  q,| }|tkrhtd|dt| | j  |   d S )Nr   r   r   0expected a comment or a line break, but found %rr5   r]   r   r   r   r   ry   r   )r   r   r   r   rz   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|rZ|d7 }||}q@|s~td| |dt| | j  | j |}| j | |dkrtd| |dt| | j  | j  }	||||	S )	Nr   aliasZanchorr   rB   zwhile scanning an %sr   u     	
  ?:,[]{}%@`)r5   r]   ry   r   r   r   r   r   )
r   r   r   r   Z	indicatorr   r   rz   r   r   r   r   r   r     s<    






zScanner.scan_anchorc           
      C   s8  | j j}| j  }|d}|dkrrd }| j d | d|}| dkrftd|dt|  | j  | j   n||tkrd }d}| j   n`d}d	}|d
kr|dkrd}q|d7 }||}qd}|r| d|}nd}| j   | d|}| }|d
krtd|dt| | j  ||f}| j  }	t	|||	S )NrB   <   tagrX   zwhile parsing a tagzexpected '>', but found %rrV   Fr   Tzwhile scanning a tagr   )
r5   r]   ry   r   r   r   r   r   r   ZTagToken)
r   r   r   rz   r   suffixr   Z
use_handler   r   r   r   r   r   =  sX    






zScanner.scan_tagFc                 C   s  | j j}|dkrd}nd}g }| j  }| j   | |\}}| |}	| jd }
|d kr|
dk r|dks| jdkrt| j	ddrd}
| 
 \}}}t|
|}n&|
dk rd}
|
| d }| |\}}d}| j j|kr| d	kr|| | d
k}d}||tkr|d7 }q|| j | | j | |  }| |\}}|dkrv|
dkrv|  s|  rvq| j j|kr| d	kr|r|r|dkr|d |r|dkr|r| d
kr|s|d n
|| q̐qqg }|dkr|| |dkr$|| n|dkr8|| td|d|||}|	d k	rd||	g t|dkr|  }|r||d  |  }qz| j  }td|||}|| |S )NrX   TFrB   z|>r   Z0top_level_block_style_scalar_no_indent_error_1_1 rJ   r   r   
r   r   r   )r5   r]   ry   r   scan_block_scalar_indicatorsscan_block_scalar_ignored_liner-   r6   r"   r!   scan_block_scalar_indentationmaxscan_block_scalar_breaksr   extendr   r   r   r   ra   rc   ScalarTokenjoinadd_pre_commentsr$   r[   CommentTokenadd_post_comment)r   r   rtr   Zfoldedchunksr   chomping	incrementZblock_scalar_commentZ
min_indentbreaks
max_indentr   r-   
line_breakZleading_non_spacer   ZtrailingtokenrH   Zcomment_end_markr   r   r   r   o  s    



  



"







zScanner.scan_block_scalarc                 C   s  | j j}d }d }| }|dkrx|dkr,d}nd}| j   | }|dkrt|}|dkrltd|d| j  | j   n`|dkrt|}|dkrtd|d| j  | j   | }|dkr|dkrd}nd}| j   | }|d	krt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)r5   r]   r   r   r   ry   r   )r   r   r   r   r   rz   r   r   r   r     sZ    




z$Scanner.scan_block_scalar_indicatorsc                 C   s   | j j}| j j}d}d }| dkr4|| 7 }|  q| dkr^|}| tkr^|| 7 }|  qB| }|tkrtd|dt| | j  |   |S )Nr   r   r   r   r   r   )r   r   r   r   r   rH   rz   r   r   r   r     s,    





z&Scanner.scan_block_scalar_ignored_linec                 C   sv   | j j}| j j}g }d}| j  }| dkrl| dkrP||   | j  }q"|  | j j|kr"| j j}q"|||fS )Nr       
  r   )r5   r]   r   ry   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<|  q| dkr~||   | j  }| j j|k r<| dkr<|  q^q<||fS )Nr   
   
  )r5   r]   r   ry   r   r   r   )r   r-   r   r   r   r   r   r   r   r   >  s    



z Scanner.scan_block_scalar_breaksc                 C   s   |dkrd}nd}| j j}g }| j  }| }| j   || || | |krz|| || || || qJ| j   | j  }td|d|||S )NrZ   TFr   )	r5   r]   ry   r   r   scan_flow_scalar_non_spacesscan_flow_scalar_spacesr   r   )r   r   doubler   r   r   Zquoter   r   r   r   r   N  s    




zScanner.scan_flow_scalarrJ   r   	r   r   rZ   /\       u    u    )r   r   btr   nvfrer   rZ   r   r   N_LPr         )xuUc           
   	   C   s  g }| j j}| j j}d}||dkr.|d7 }q|dkrP|| j | || | }|s|dkr|ddkr|d |d q|r|dks|s|dkr|| |  q|r|dkr|  | }|| jkr|| j|  |  n|| jkrr| j| }|  t|D ]8}||dkrtd	|d
|t	||f | j 
 qt| j |d}	|t|	 || nB|dkr|   || || ntd	|dt	| | j 
 q|S qd S )Nr   u    
'"\ 	  rB   rY   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)r5   r]   r   r   r   ESCAPE_REPLACEMENTSESCAPE_CODESranger   r   ry   r   r	   r   r   scan_flow_scalar_breaks)
r   r   r   r   r   r   r   rz   kcoder   r   r   r   ~  s`    








z#Scanner.scan_flow_scalar_non_spacesc           
      C   s   | j j}g }d}||dkr&|d7 }q| j |}| j | | }|dkrbtd|d| j  nT|dkr|  }| ||}	|dkr|| n|	s|d	 |	|	 n
|| |S )
Nr   r   rB   rJ   while scanning a quoted scalarzfound unexpected end of streamr   r   r   )
r5   r]   r   r   r   ry   r   r  r   r   )
r   r   r   r   r   r   whitespacesrz   r   r   r   r   r   r     s2    


zScanner.scan_flow_scalar_spacesc                 C   s   g }| j j}| j j}| j d}|dks0|dkrP|dtkrPtd|d| j  | dkrb|  qP| dkr|||   q|S qd S )Nr   r   r   r  z#found unexpected document separatorr   r   )	r5   r]   r   r   r   r   ry   r   r   )r   r   r   r   r   r   r   r   r   r   r    s     

zScanner.scan_flow_scalar_breaksc                 C   s  | j j}| j j}g }| j  }|}| jd }g }d}| dkrBql||}	|	dkrd||d tkrdnJ|	dkrx| jdkrxn6|	tks| js|	dkr||d tks| jr|	dkrq|d7 }qB| jr|	dkr||d dkr|| td	|d
| j  d|dkrqld| _	|
| || j | || | j  }| ||}|rl| dksl| js0| j j|k r0qlq0td|d||}
|r|d dkrtd|d ||}|
| |
S )NrB   r   r   rT   rS   r   z,:?[]{}u     	
  ,[]{}zwhile scanning a plain scalarzfound unexpected ':'zGPlease check http://pyyaml.org/wiki/YAMLColonInFlowContext for details.Fr   Tr   )r5   r]   r   ry   r-   r   r6   r'   r   r/   r   r   r   scan_plain_spacesr   r   r   r   r   )r   r   r   r   r   r   r-   Zspacesr   rz   r   rH   r   r   r   r     s    


	
	




zScanner.scan_plainc                 C   s2  | j j}| j j}g }d}||dkr.|d7 }q| j |}| j | | }|dkr|  }	d| _| j d}
|
dks|
dkr|dtkrd S g }| d	kr| dkr|  q||   | j d}
|
dks|
dkr|dtkrd S q|	d
kr||	 n|s|d || n|r.|| |S )Nr   r   rB   r   Tr   r   r   r   r   )	r5   r]   r   r   r   r/   r   r   r   )r   r-   r   r   r   r   r   r  rz   r   r   r   r   r   r   r  7  s>    






zScanner.scan_plain_spacesc                 C   s   | j j}| }|dkr6td| |dt| | j  d}||}|dkrd|  kr^dksn d|  krtd	ksn d
|  krdksn |dkr|d7 }||}qJ|dkr| j | td| |dt| | j  |d7 }| j |}| j | |S )NrV   while scanning a %szexpected '!', but found %rrB   r   r   r   r   r   r   r   z-_)r5   r]   r   r   ry   r   r   )r   r   r   r   rz   r   r   r   r   r   r   ]  s6    
J

zScanner.scan_tag_handlec                 C   s  | j j}g }d}||}d|  kr,dksbn d|  krBdksbn d|  krXdksbn |dkr|d	kr|| j | | j | d}|| || n|d
7 }||}q|dkr|| j | | j | d}|std| |dt| | j  d	|S )Nr   r   r   r   r   r   r   z-;/?:@&=+$,_.!~*'()[]%rK   rB   zwhile parsing a %szexpected URI, but found %rr   )
r5   r]   r   r   r   scan_uri_escapesr   r   ry   r   )r   r   r   r   r   r   rz   r   r   r   r   ~  sP       

zScanner.scan_tag_uric           
   
   C   s  | j j}| j j}g }| j  }| dkr|  tdD ]4}||dkr6td| |dt|| | j  q6tr|t	| j 
dd n|tt	| j 
dd |d qz(trt|d}ntd|d}W n: tk
r }	 ztd| |t|	|W 5 d }	~	X Y nX |S )	NrK   r   r  r  zBexpected URI escape sequence of 2 hexdecimal numbers, but found %rr  zutf-8    )r5   r]   r   ry   r  r   r   r
   r   r   r   chrbytesdecodeZunicoder   UnicodeDecodeErrorstr)
r   r   r   r   r   Z
code_bytesr   r  r   excr   r   r   r    s6    



(zScanner.scan_uri_escapesc                 C   sX   | j  }|dkr>| j ddkr0| j d n
| j   dS |dkrT| j   |S dS )N   
r   
r        r   r5   r]   r   r   )r   rz   r   r   r   r     s    



zScanner.scan_line_break)N)F)Rr   r   r   r   propertyr'   r#   r5   r6   r>   r@   rD   r8   rI   r9   rF   rE   r   r   r\   r   r+   r^   r`   rb   rd   r   re   rf   r   rg   rh   r   ri   rk   rm   ro   rp   rq   rr   rs   rt   r   ru   rv   r   rx   r_   ra   rc   rj   rl   rn   rw   r[   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r  r   r  r   r   r  r   r   r   r   r   r   B   s   

6

p	=					%'/2
p36M&!# 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   sP   |   r|   q |   t| jrL|s,dS |D ]}t| jd |r0 dS q0dS r7   )r8   r9   _gather_commentsr:   r*   r;   r<   r   r   r   r>     s    

zRoundTripScanner.check_tokenc                 C   s2   |   r|   q |   t| jr.| jd S d S r?   )r8   r9   r*  r:   r*   r&   r   r   r   r@     s    


zRoundTripScanner.peek_tokenc                 C   s   g }| j s|S t| j d trB| j d}|  jd7  _|| |  r|   | j s\|S t| j d trB|  jd7  _| j d}|| qBt|dkr| j d 	| | j
st| j dk r|   dS )zcombine multiple comment linesr   rB   r   N)r*   r;   r   rC   r,   r   r8   r9   r$   r   r)   )r   ZcommentsrH   r   r   r   r*    s&    
z!RoundTripScanner._gather_commentsc                 C   s   |   r|   q |   t| jrt| jdkrt| jd ttt	t
frt| jd tr| jd jj| jd jjkr|  jd7  _| jd | jd |  jd7  _| jdS d S rA   )r8   r9   r*  r:   r*   r$   r;   r   r   r   r   r   r   r   r   r,   r   rC   r&   r   r   r   rD   
  s(    


	zRoundTripScanner.get_tokenc                 C   s@   |\}}}|r(|d dkr(|d d }q
| j t||| d S )Nr(   r   )r*   r   r   )r   rH   r   r   r   r   r   r   rI   %  s    
zRoundTripScanner.fetch_commentc                 C   sx  | j j}| j j}| j jdkr,| dkr,|  d}|st| dkrH|  q6| }|dkr| j  }|}|  |tkr| }|dkrq||7 }|  qj|  }t|dkr||7 }|  }q| j  }| jsd| _	|||fS t
|  rn| j  }| jsd| _	| }|dkrr| j  }d	}|r8| jdd
}||7 }q| dkrX|ddd d }| j  }|||fS q0d}q0d S )Nr   r   Fr   r   rJ   Tr   r   )
empty_linerB   )r5   r]   r   r   ry   r   r   r$   r'   r/   r:   rsplit)r   r   r   r   rz   r   rH   r   r   r   r   r[   0  sX    








z#RoundTripScanner.scan_to_next_tokenFc                 C   sr   | j  }|dkr>| j ddkr0| j d n
| j   dS |dkrT| j   |S |rn|dkrn| j   |S dS )Nr%  r   r&  r   r'  z	 r   r(  )r   r+  rz   r   r   r   r   u  s    




z RoundTripScanner.scan_line_breakTc                 C   s   t j| ||dS )N)r   )r   r   )r   r   r   r   r   r   r     s    z"RoundTripScanner.scan_block_scalarN)F)T)r   r   r   r>   r@   r*  rD   rI   r[   r   r   r   r   r   r   r     s   
E
N)Z
__future__r   r   r   r   Zruamel_yaml.errorr   Zruamel_yaml.tokensZruamel_yaml.compatr   r	   r
   r   r   ZAnyZDictZOptionalZListZUnionZTextZVersionType__all__r   r   r   r   objectr   r   r   r   r   r   r   <module>   s0   
             #