U
    ƽb\                    @   s   d dl Z d dlmZmZ d dlT d dlmZmZmZm	Z	 dddgZdZd	Zd
Zdd ZG dd deZG dd dZG dd dZG dd deZd Zd ZG dd dZG dd deZG dd deZG dd deZG dd dZ G dd deZ!dS )    N)MarkedYAMLErrorCommentMark)*)_Fcheck_anchorname_charnprintnprintfScannerRoundTripScannerScannerErroru   
   u    
 	   	c                  O   s
   t | |S N)r   )argskw r   7/tmp/pip-unpacked-wheel-ctuyz3qg/ruamel/yaml/scanner.pyxprintf0   s    r   c                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__r   r   r   r   r   6   s   c                   @   s   e Zd Zdd ZdS )	SimpleKeyc                 C   s(   || _ || _|| _|| _|| _|| _d S r   )token_numberrequiredindexlinecolumnmark)selfr   r   r   r   r   r   r   r   r   __init__=   s    zSimpleKey.__init__N)r   r   r   r   r   r   r   r   r   :   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   sB   || _ | j dk	r*t| j dddkr*| | j _|   d| _d| _dS )zInitialize the scanner.N_scannerF)loadergetattrr   reset_scannerZ
first_timeyaml_version)r   r    r   r   r   r   H   s    zScanner.__init__c                 C   s
   t | jS r   )lenflow_contextr   r   r   r   
flow_level[   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"   `   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    resolverZprocessing_versionr&   r   r   r   scanner_processing_version   s    
z"Scanner.scanner_processing_versionc                 G   sL   |   r|   q t| jdkrH|s(dS |D ]}t| jd |r, dS q,dS Nr   TF)need_more_tokensfetch_more_tokensr$   r*   
isinstancer   choiceschoicer   r   r   check_token   s    
zScanner.check_tokenc                 C   s.   |   r|   q t| jdkr*| jd S d S Nr   )r9   r:   r$   r*   r&   r   r   r   
peek_token   s    
zScanner.peek_tokenc                 C   s>   |   r|   q t| jdkr:|  jd7  _| jdS d S Nr      )r9   r:   r$   r*   r,   popr&   r   r   r   	get_token   s
    
zScanner.get_tokenc                 C   s:   | j r
dS t| jdkrdS |   |  | jkr6dS dS )NFr   T)r)   r$   r*   stale_possible_simple_keysnext_possible_simple_keyr,   r&   r   r   r   r9      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 t$d|d| j% d S )N %-.[{]},?:r   &!|>'"z!while scanning for the next tokenz2found character {ch!r} that cannot start any tokench)&scan_to_next_tokenrJ   rF   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   rI   r]   r   r   r   r:      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   rG   L  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   r|   )r   r}   r~   r   r   r   rF   \  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   r|   r0   )r   r   r   r~   r   r   r   save_possible_simple_keyp  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   r|   )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   )
boolr'   r-   r5   r|   r.   rD   r*   append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   r|   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   r|   r*   r   ZStreamEndTokenr)   r   r   r   r   ra     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   rc     s    
zScanner.fetch_directivec                 C   s   |  t d S r   )fetch_document_indicatorZDocumentStartTokenr&   r   r   r   re     s    zScanner.fetch_document_startc                 C   s   |  t d S r   )r   ZDocumentEndTokenr&   r   r   r   rg     s    zScanner.fetch_document_endc                 C   sN   |  d |   d| _| j }| jd | j }| j||| d S )Nr(   F   )r_   r   r/   r5   r|   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 )NrO   to_push)fetch_flow_collection_startZFlowSequenceStartTokenr&   r   r   r   rh     s    z!Scanner.fetch_flow_sequence_startc                 C   s   | j tdd d S )NrP   r   )r   ZFlowMappingStartTokenr&   r   r   r   ri     s    z Scanner.fetch_flow_mapping_startc                 C   sN   |    | j| d| _| j }| j  | j }| j||| d S NT)r   r%   r   r/   r5   r|   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   rj     s    zScanner.fetch_flow_sequence_endc                 C   s   |  t d S r   )r   FlowMappingEndTokenr&   r   r   r   rk     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%   rD   
IndexErrorr/   r5   r|   r   r*   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   )r/   r   r5   r|   r   r*   r   ZFlowEntryToken)r   r   r   r   r   r   rl   +  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   r|   r   r   r*   r   ZBlockSequenceStartTokenr   r   BlockEntryTokenr   r   r   r   r   r   r   rn   7  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   r|   r   r   r*   r   BlockMappingStartTokenr   r   KeyTokenr   r   r   r   rp   S  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   r|   r   r   r   
ValueToken)r   r~   r   r   r   r   r   r   rr   o  s@    

 






zScanner.fetch_valuec                 C   s$   |    d| _| j| t d S r   )r   r/   r*   r   scan_anchorZ
AliasTokenr&   r   r   r   rs     s    zScanner.fetch_aliasc                 C   s$   |    d| _| j| t d S r   )r   r/   r*   r   r   ZAnchorTokenr&   r   r   r   rt     s    zScanner.fetch_anchorc                 C   s"   |    d| _| j|   d S r   )r   r/   r*   r   scan_tagr&   r   r   r   ru     s    zScanner.fetch_tagc                 C   s   | j dd d S )NrX   stylefetch_block_scalarr&   r   r   r   rv     s    zScanner.fetch_literalc                 C   s   | j dd d S )NrY   r   r   r&   r   r   r   rw     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 )NrZ   r   fetch_flow_scalarr&   r   r   r   rx     s    zScanner.fetch_singlec                 C   s   | j dd d S )Nr[   r   r   r&   r   r   r   ry     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   r{     s    zScanner.fetch_plainc                 C   s   | j jdkrdS d S )Nr   T)r5   r   r&   r   r   r   rb     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   rd     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   rf     s     zScanner.check_document_endc                 C   s   | j dtkS )NrC   )r5   r`   r   r&   r   r   r   rm     s    zScanner.check_block_entryc                 C   s   t | jrdS | jdtkS )NTrC   )r   r'   r5   r`   r   r&   r   r   r   ro     s    
zScanner.check_keyc                 C   s   | j dkrt| jrvdS n\t| jrv| jd dkrH| jdtkrrdS n*| jrrt| jd t	rr| jdtkrrdS dS | jdtkS )NrC   rC   Tr(   rO   rC   F)
r7   r   r'   r%   r5   r`   r   r*   r;   r   r&   r   r   r   rq     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      	
  -?:,[]{}#&*!|>'"%@`rC   rM   z?:TrU   )r5   r`   r7   r   r'   r   
_SPACE_TAB)r   srpr]   Zch1r   r   r   rz   .  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^   S  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   r|   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   z  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
|td|d| j  | j |}| j | | }|dkrtd
|td|d| j  |S )Nr   09AZazz-_:.rC   while scanning a directive:expected alphabetic or numeric character, but found {ch!r}r\        
  )r5   r`   r   r   r|   r   r   )r   r   lengthr   r]   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|td| d| j  |  | |}| dkrtd|td| d| j  ||f| _| jS )Nr   rN   r   z/expected a digit or '.', but found {srp_call!r}srp_callr   )r5   r`   r   scan_yaml_directive_numberr   r   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sHn td|td|d| j  d}d||  krddkrrn n
|d7 }qLt| j |}|| |S )Nr   r   r   z"expected a digit, but found {ch!r}r\   r   rC   )r5   r`   r   r   r   r|   intr   )r   r   r   r   r]   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|td|d| j |S )N	directiver   r   expected ' ', but found {ch!r}r\   )scan_tag_handler5   r`   r   r   r|   r   r   r   r]   r   r   r   r     s    

z!Scanner.scan_tag_directive_handlec                 C   s>   |  d|}| j }|dkr:td|td|d| j |S )Nr   r   r   r   r\   )scan_tag_urir5   r`   r   r   r|   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|td|d| j  |   d S )Nr   r   r   4expected a comment or a line break, but found {ch!r}r\   r5   r`   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|rZ|d7 }||}q@|sttd|d|td|d	| j  | j |}| j | |d
krttd|d|td|d	| j  | j  }	||||	S )Nr   aliasanchorr   rC   while scanning an {name!s}r   r   r\   u     	
  ?:,[]{}%@`)r5   r`   r|   r   r   r   r   r   )
r   r   r   r   Z	indicatorr   r   r]   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|td| d| 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|td|d| j  ||f}| j  }	t	|||	S )NrC   <   tagrY   zwhile parsing a tagz$expected '>', but found {srp_call!r}r   rW   Fr   Tzwhile scanning a tagr   r\   )
r5   r`   r|   r   r   r   r   r   r   ZTagToken)
r   r   r   r]   r   suffixr   Z
use_handler   r   r   r   r   r   G  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|||}| j	d k	rt| j	dd}|d kr|	d k	r||	g t|dkr~| j	d k	rt| j	dd }|d k	r|jt| }|D ]0}|d dkst| j|d| |d7 }q|  }|r4|d|d j |d   |  }q| j	d k	r~t| j	dd}|d kr~| j  }td|||}|| |S )NrY   TFrC   z|>r   Z0top_level_block_style_scalar_no_indent_error_1_1 rK   r   r   
r   r   r   comment_handlingr(   ) r5   r`   r|   r   scan_block_scalar_indicatorsscan_block_scalar_ignored_liner-   r7   r!   r    scan_block_scalar_indentationmaxscan_block_scalar_breaksr   extendr   r   r   r   rd   rf   ScalarTokenjoinadd_pre_commentsr$   r   AssertionErrorcommentsadd_blank_liner^   CommentTokenadd_post_comment)r   r   rtr   foldedchunksr   chomping	incrementZblock_scalar_commentZ
min_indentbreaks
max_indentr   r-   
line_breakZleading_non_spacer   Ztrailingtokencomment_handlerr   xrI   Zcomment_end_markr   r   r   r   y  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|td
|d| j  ||fS )Nz+-+TF
0123456789r   while scanning a block scalarz<expected indentation indicator in the range 1-9, but found 0r   z=expected chomping or indentation indicators, but found {ch!r}r\   )r5   r`   r   r   r   r|   r   )r   r   r   r   r   r]   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|td|d| j  |   |S )Nr   r   r   r  r   r\   r   )r   r   r   r   r   rI   r]   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   r|   r   r   r   )r   r   r   r   r   r   r   r   r   r   B  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   r|   r   r   r   )r   r-   r   r   r   r   r   r   r   r   T  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 )Nr[   TFr   )	r5   r`   r|   r   r   scan_flow_scalar_non_spacesscan_flow_scalar_spacesr   r   )r   r   doubler   r   r   quoter   r   r   r   r   d  s    




zScanner.scan_flow_scalarrK   r   	r   r   r[   /\       u    u    )r   r   btr  nvfrer   r[   r  r  N_LPr         )r   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rp| j| }|  t|D ]6}||dkrtd	|t	d
|||d| j 
 qt| j |d}	|t|	 || nB|dkr|   || || ntd	|t	d|d| j 
 q|S qd S )Nr   u    
'"\ 	  rC   rZ   r   z"\r  0123456789ABCDEFabcdefz%while scanning a double-quoted scalarzQexpected escape sequence of {length:d} hexdecimal numbers, but found {srp_call!r})r   r      u
   
  z%found unknown escape character {ch!r}r\   )r5   r`   r   r   r   ESCAPE_REPLACEMENTSESCAPE_CODESranger   r   r|   r   chrr   r   scan_flow_scalar_breaks)
r   r  r   r   r   r   r   r]   kcoder   r   r   r    sd    








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   rC   rK   while scanning a quoted scalarzfound unexpected end of streamr  r   r   )
r5   r`   r   r   r   r|   r   r)  r   r   )
r   r  r   r   r   r   whitespacesr]   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   r|   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||}
| jd k	rt| jdd}|d kr|r|d dkrtd|d ||}|
| nB|dk	r|jd }|D ](}	|	dkr| jdd| |d7 }q|
S )NrC   r   r   rU   rT   r   z,:?[]{}u     	
  ,[]{}zwhile scanning a plain scalarzfound unexpected ':'zGPlease check http://pyyaml.org/wiki/YAMLColonInFlowContext for details.Fr   Tr   r   )r5   r`   r   r|   r-   r   r7   r'   r   r/   r   r   r   scan_plain_spacesr   r   r   r    r!   r   r   r   r   r   )r   r   r   r   r   r   r-   spacesr   r]   r   r   rI   r   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   rC   r  Tr   r   r   r  r   )	r5   r`   r   r   r   r/   r   r   r   )r   r-   r   r   r   r   r   r-  r]   r   r   r   r   r   r   r.  ]  s>    






zScanner.scan_plain_spacesc                 C   s  | j j}| }|dkr:ttd|d|td|d| j  d}||}|dkrd|  krbd	ksn d
|  krxdksn d|  krdksn |dkr|d7 }||}qN|dkr| j | ttd|d|td|d| j  |d7 }| j |}| j | |S )NrW   r   r   zexpected '!', but found {ch!r}r\   rC   r   r   r   r   r   r   r   z-_)r5   r`   r   r   r|   r   r   )r   r   r   r   r]   r   r   r   r   r   r     s6    

J


zScanner.scan_tag_handlec                 C   s"  | j j}g }d}||}d|  kr,dkstn d|  krBdkstn d|  krXdkstn |dkst| jd	kr|d
kr|dkr|| j | | j | d}|| || n|d7 }||}q|dkr|| j | | j | d}|sttd|d|td|d| j 	 d
|S )Nr   r   r   r   r   r   r   z-;/?:@&=+$,_.!~*'()[]%r   r   rL   rC   zwhile parsing an {name!s}r   zexpected URI, but found {ch!r}r\   r   )r5   r`   r7   r   r   r   scan_uri_escapesr   r   r|   r   )r   r   r   r   r   r   r]   r   r   r   r     sX       


zScanner.scan_tag_uric           
   
   C   s   | j j}| j j}g }| j  }| dkr|  tdD ]8}||dkr6ttd|d|td||d| j  q6|t| j 	dd |d qzt
|d	}W n< tk
r }	 zttd|d|t|	|W 5 d }	~	X Y nX |S )
NrL   r   r#  r   r   zLexpected URI escape sequence of 2 hexdecimal numbers, but found {srp_call!r}r   r$  zutf-8)r5   r`   r   r|   r'  r   r   r   r   r   bytesdecodeUnicodeDecodeErrorstr)
r   r   r   r   r   Z
code_bytesr   r*  r   excr   r   r   r0    s:    





   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   r]   r   r   r   r     s    



zScanner.scan_line_break)N)F)Rr   r   r   r   propertyr'   r"   r5   r7   r?   rA   rE   r9   rJ   r:   rG   rF   r   r   r_   r   r+   ra   rc   re   rg   r   rh   ri   r   rj   rk   r   rl   rn   rp   rr   rs   rt   ru   rv   rw   r   rx   ry   r   r{   rb   rd   rf   rm   ro   rq   rz   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   r0  r   r   r   r   r   r	   G   s   

6

p	=					%'/2
|3:Y&!$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   sT   |   r|   q |   t| jdkrP|s0dS |D ]}t| jd |r4 dS q4dS r8   )r9   r:   _gather_commentsr$   r*   r;   r<   r   r   r   r?     s    
zRoundTripScanner.check_tokenc                 C   s6   |   r|   q |   t| jdkr2| jd S d S r@   )r9   r:   r;  r$   r*   r&   r   r   r   rA     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 )zCcombine multiple comment lines and assign to next non-comment-tokenr   rC   r   N)r*   r;   r   rD   r,   r   r9   r:   r$   r   r)   )r   r   rI   r   r   r   r;    s&    
z!RoundTripScanner._gather_commentsc                 C   sL  |   r|   q |   t| jdkrHt| jdkrt| jd tttt	frt| jd t
r| jd jj| jd jjkr|  jd7  _| jd}|   t| jdkrt| jd t
r|  jd7  _| jd}|jd|jj  |j |_|   q| jd | nt| jdkr.t| jd tr.t| jd t
r.| jd jj| jd jjkr.|  jd7  _| jd}d|jj| jd jj  d|jj  |j |_| jd | |   t| jdkr.t| jd t
r.|  jd7  _| jd}|jd|jj  |j |_|   q|  jd7  _| jdS d S )Nr   rC   r   r   )r9   r:   r;  r$   r*   r;   r   r   r   r   r   r   r   r   r,   rD   r   r   r   )r   cZc1r   r   r   rE   0  sd    

	"

"zRoundTripScanner.get_tokenc                 C   s@   |\}}}|r(|d dkr(|d d }q
| j t||| d S )Nr(   r   )r*   r   r   )r   rI   r   r   r   r   r   r   rJ   f  s    
zRoundTripScanner.fetch_commentc                 C   s  | j j}| j j}| j jdkr,| dkr,|  d}|s~| dkrH|  q6| }|dkr| j  }|}|  |tkr| }|dkr|d7 }q||7 }|  qj|  }t|dkr||7 }|  }q| j  }| jsd| _	|||fS |  d	krx| j  }| jsd| _	| }|dkr|| j  }d	}|rB| jdd
}||7 }q$| dkrb|
ddd d }| j  }|||fS q0d}q0d S )Nr   r   Fr   r   rK   r   Tr   
empty_linerC   )r5   r`   r   r   r|   r   r   r$   r'   r/   rsplit)r   r   r   r   r]   r   rI   r   r   r   r   r^   q  sZ    








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 )Nr6  r   r7  r   r8  z	 r   r9  )r   r>  r]   r   r   r   r     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?   rA   r;  rE   rJ   r^   r   r   r   r   r   r   r
     s   
6I
c                   @   sB   e Zd ZdZdd ZdddZdd Zd	d
 Zdd Zdd Z	dS )CommentBase)r   r   r   usedfunctionflineufunulinec                 C   sN   || _ || _|| _d| _tt d d }|j| _|j| _	d | _
d | _d S )Nr   r   r   )r   r   r   rA  inspectgetframeinfostackrB  linenorC  rD  rE  )r   r   r   r   infor   r   r   r     s    zCommentBase.__init__r  c                 C   s0   || _ tt d d }|j| _|j| _d S )NrC   r   )rA  rF  rG  rH  rB  rD  rI  rE  )r   r  rJ  r   r   r   set_used  s    zCommentBase.set_usedc                 C   s
   d| _ d S )NrX   )rA  r&   r   r   r   set_assigned  s    zCommentBase.set_assignedc                 C   s   t d| jdS )Nz{value}r   r   r   r&   r   r   r   __str__  s    zCommentBase.__str__c                 C   s   t d| jdS )Nz	{value!r}rM  rN  r&   r   r   r   __repr__  s    zCommentBase.__repr__c                 C   s2   t d| j| j| j| jd | j| j| j| j| j	d
S )NzP{name}{used} {line:2}:{column:<2} "{value:40s} {function}:{fline} {ufun}:{uline}r[   )	r   r   r   r   rA  rB  rC  rD  rE  )
r   r   r   r   r   rA  rB  rC  rD  rE  r&   r   r   r   rJ    s    zCommentBase.infoN)r  )
r   r   r   	__slots__r   rK  rL  rO  rP  rJ  r   r   r   r   r@    s   
r@  c                       s    e Zd ZdZ fddZ  ZS )
EOLCommentZEOLCc                    s   t  ||| d S r   superr   r   r   r   r   	__class__r   r   r     s    zEOLComment.__init__r   r   r   r   r   __classcell__r   r   rV  r   rR    s   rR  c                       s    e Zd ZdZ fddZ  ZS )FullLineCommentZFULLc                    s   t  ||| d S r   rS  rU  rV  r   r   r     s    zFullLineComment.__init__rX  r   r   rV  r   rZ    s   rZ  c                       s    e Zd ZdZ fddZ  ZS )BlankLineCommentZBLNKc                    s   t  ||| d S r   rS  rU  rV  r   r   r   %  s    zBlankLineComment.__init__rX  r   r   rV  r   r[  "  s   r[  c                   @   sv   e Z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dZdd Zdd Zdd Zdd ZdS )ScannedCommentsc                 C   s   i | _ g | _d S r   )r   unusedr&   r   r   r   r   +  s    zScannedComments.__init__c                 C   sZ   | ddkr |d dks,tnd|ks,tt|d d || | j|< }| j| |S Nr   rC   r(   )countr   rR  r   r]  r   r   rI   r   r   retvalr   r   r   add_eol_comment0  s    zScannedComments.add_eol_commentc                 C   sZ   | ddkr|d dkst|| jks,tt|d d || | j|< }| j| |S r^  )r_  r   r   r[  r]  r   r`  r   r   r   r   ;  s
    zScannedComments.add_blank_linec                 C   sL   | ddkr|d dkstt|d d || | j|< }| j| |S r^  )r_  r   rZ  r   r]  r   r`  r   r   r   add_full_line_commentD  s    z%ScannedComments.add_full_line_commentc                 C   s
   | j | S r   )r   )r   idxr   r   r   __getitem__O  s    zScannedComments.__getitem__c                 C   s"   dd dd | j D  d S )NzParsedComments:
  z
  c                 s   s$   | ]\}}t d || dV  qdS )z{lineno:2} {x}rI  r   N)r   rJ  ).0rI  r   r   r   r   	<genexpr>X  s   z*ScannedComments.__str__.<locals>.<genexpr>r   r   r   itemsr&   r   r   r   rO  S  s    zScannedComments.__str__c                 C   s(   t | j d \}}td|| dS )Nr(   z{lineno:2} {x}
rf  )r   r   rj  r   rJ  )r   rI  r   r   r   r   last`  s    zScannedComments.lastc                 C   s   t | jdkS r@   )r$   r]  r&   r   r   r   any_unprocessede  s    zScannedComments.any_unprocessedFc                 c   s   t | jdkr~|r| jdn| jd }tt d d }td|| j| j|j	|j
 || j| fV  |r | j|   q d S )Nr   rC   Zusing)r$   r]  rD   rF  rG  rH  r   r   r   rB  rI  rK  )r   ZusefirstrJ  r   r   r   unprocessedn  s    zScannedComments.unprocessedc                 C   s   |j j}tt d d }td|| j|j|j d}| jr| jd |k rd}| j	d}td| | j
|   || q8|S )NrC   r   
assign_preFTzassign_pre < )r   r   rF  rG  rH  r   r]  rB  rI  rD   r   rK  Zadd_comment_prer   r   Z
token_linerJ  Zgobbledrm  r   r   r   ro  x  s    
zScannedComments.assign_prec                 C   s6  z| j d }W n tk
r$   Y d S X t| j| ts:d S d}||  jj|ks`t||  trj|d7 }q>td| t	||krt||  t
rt||d   t
rd S zt||  t
r2t||d   tr2z>| j d}| j|   td||t ||  |t W n tk
r*   tY nX W d S W n tk
rR   td Y nX zt||  t
rt||d   ttfrz0| j d}| j|   ||  |t W n tk
r   tY nX W d S W n tk
r   td Y nX |D ]}td| qtdt||   dd l}|d d S )	Nr   rC   Zidx1z>>>>>aZIndexError1ZIndexError2ztt-znot implemented EOL)r]  r   r;   r   rR  r   r   r   r   r$   r   r   rD   rK  KEYCMNTZadd_comment_eolrH   r   	VALUECMNTtypesysexit)r   r*   Zcomment_linerd  Zeol_idxr  rt  r   r   r   
assign_eol  sp     


 

 

zScannedComments.assign_eolc                 C   s   |j j}tt d d }td|| j|j|j d}| jr| jd |k rd}| j	d}td| | j
|   || q8|S )NrC   r   assign_postFTzassign_post < )r   r   rF  rG  rH  r   r]  rB  rI  rD   r   rK  Zadd_comment_postrp  r   r   r   rw    s    
zScannedComments.assign_postc                 C   s   d dd | j D S )Nr   c                 s   s.   | ]&\}}|j d krtd|| dV  qdS )r   z  {ind:2} {x}
)indr   N)rA  r   rJ  )rg  rx  r   r   r   r   rh    s   
z2ScannedComments.str_unprocessed.<locals>.<genexpr>ri  r&   r   r   r   str_unprocessed  s
    zScannedComments.str_unprocessedN)F)r   r   r   r   rb  r   rc  re  rO  rk  rl  rn  ro  rv  rw  ry  r   r   r   r   r\  *  s   		

8r\  c                       sD   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Z  Z	S )RoundTripScannerSCc                    s&   t  j|| | jd k	std | _d S r   )rT  r   r    r   r   )r   argr   rV  r   r   r     s    zRoundTripScannerSC.__init__c                 C   st   |   r|   q t| jdkrpt| jd trD| j| jd  n| j| jd  |  j	d7  _	| j
dS d S rB   )r9   r:   r$   r*   r;   r   r   rw  ro  r,   rD   r&   r   r   r   rE     s    
zRoundTripScannerSC.get_tokenc                 C   s   | j d krt  | j_| _ | jr$dS t| jdkr6dS |   |  | j	krPdS t| jdk rbdS | jd j
j| jd j
jkrdS tdt| j | jD ]}t| qt| j   | j | jd  | j | j dS )NFr   Tr   r(   z-x--)r   r\  r    Zparsed_commentsr)   r$   r*   rF   rG   r,   r   r   r   ry  ro  rv  )r   r  r   r   r   r9     s(    


z#RoundTripScannerSC.need_more_tokensc           	      C   st  | j j}| j j}| j jdkr,| dkr,|  | j  }d}|sp| dkrR|  q@| }|dkr| j  }|}|  |tkr| }|dkr|d7 }q||7 }|  qt|jdkr| j||j|j	 n| j
||j|j	 d}|   | jsd	| _d S t|  rj| jsd	| _|   d S |r:| jd	d
}||7 }q| dkrZ|ddd d }| j  }d S q:d	}q:d S )Nr   r   Fr   r   rK   r   r   Tr=  rC   )r5   r`   r   r   r|   r   r   r   rc  r   rb   scan_empty_or_full_line_commentsr'   r/   r   r   r?  )	r   r   r   r   r   r]   Zcomment_start_markrI   r  r   r   r   r^   	  sn    



        
z%RoundTripScannerSC.scan_to_next_tokenc                 C   s  | j  }|jdkstd}d }d }| j  }|dkr| j ddkrT| j d n
| j   |d k	r|d7 }| j||j|j	 d }n|d7 }| j
||j|j	 d}| j  }| j  }q.|d kr|dkr||7 }q|dkr| j  }d}qqn||7 }| j   | j  }q.d S )	Nr   r   r  r   r7  r   r   r   )r5   r|   r   r   r`   r   r   r   rc  r   r   )r   ZblmarkZblanksrI   r   r]   r   r   r   r|  H	  s<    







z3RoundTripScannerSC.scan_empty_or_full_line_commentsc                 C   s   | j j}| j j}d}d }| dkr4|| 7 }|  q| dkrpd}| j  }| tkrh|| 7 }|  qL|d7 }| }|tkrtd|td|d| j  |d k	r| j||j	|j
 |   d S )Nr   r   r   r   r  r   r\   )r5   r`   r   r|   r   r   r   r   rb  r   r   r   )r   r   r   r   r   rI   r   r]   r   r   r   r   p	  s4    






z1RoundTripScannerSC.scan_block_scalar_ignored_line)
r   r   r   r   rE   r9   r^   r|  r   rY  r   r   rV  r   rz    s   @(rz  )"rF  Zruamel.yaml.errorr   r   Zruamel.yaml.tokensZruamel.yaml.compatr   r   r   r   AnyDictOptionalListUnionTextZVersionType__all__r   r   r   r   r   r   r	   r
   rr  rq  r@  rR  rZ  r[  r\  rz  r   r   r   r   <module>   sF   
             D ]2 .