B
    |?_[                @   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     	
  z 	c               @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   2lib/python3.7/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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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@d|d} ZAd~d ZBdd ZCdd ZDdd ZEdddddddddddddddddddZFddddZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPd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   D   s
    zScanner.__init__c             C   s<   d| _ d| _g | _|   d| _d| _g | _d| _i | _d S )NFr   T)	done
flow_leveltokensfetch_stream_starttokens_takenindentindentsallow_simple_keypossible_simple_keys)r   r   r   r   r!   V   s    zScanner.reset_scannerc             C   s   t | jdr| jj | jjS )Ntyp)hasattrr   readerZ_reader)r   r   r   r   r.      s    zScanner.readerc             C   s   t | jdr| jjjS | jjS )Nr,   )r-   r   ZresolverZprocessing_version)r   r   r   r   scanner_processing_version   s    
z"Scanner.scanner_processing_versionc             G   sN   x|   r|   qW t| jrJ|s(dS x |D ]}t| jd |r.dS q.W dS )NTr   F)need_more_tokensfetch_more_tokensboolr%   
isinstance)r   choiceschoicer   r   r   check_token   s    


zScanner.check_tokenc             C   s.   x|   r|   qW t| jr*| jd S d S )Nr   )r0   r1   r2   r%   )r   r   r   r   
peek_token   s    

zScanner.peek_tokenc             C   s>   x|   r|   qW t| jr:|  jd7  _| jdS d S )N   r   )r0   r1   r2   r%   r'   pop)r   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   r0      s    zScanner.need_more_tokensc             C   s   t d S )N)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_tokenr?   r;   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   r>   chr   r   r   r1      sb    

	





zScanner.fetch_more_tokensc             C   s:   d }x0| j D ]&}| j | }|d ks,|j|k r|j}qW |S )N)r+   r   )r   Zmin_token_numberlevelkeyr   r   r   r<   :  s    	

z Scanner.next_possible_simple_keyc             C   sf   x`t | jD ]R}| j| }|j| jjks:| jj|j dkr|jrVtd|jd| j | j|= qW d S )Ni   zwhile scanning a simple keyzcould not find expected ':')	listr+   r   r.   r   r   r   r   ro   )r   rq   rr   r   r   r   r;   J  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 )N)r$   r(   r.   r   r*   remove_possible_simple_keyr'   lenr%   r   r   r   ro   r+   )r   r   r   rr   r   r   r   save_possible_simple_key\  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 )Nzwhile scanning a simple keyzcould not find expected ':')r$   r+   r   r   r   r.   ro   )r   rr   r   r   r   rt   p  s    z"Scanner.remove_possible_simple_keyc             C   sJ   t | jrd S x6| j|krD| j }| j | _| jt	|| qW d S )N)
r2   r$   r(   r.   ro   r)   r9   r%   appendZBlockEndToken)r   r   r   r   r   r   rR     s    

zScanner.unwind_indentc             C   s&   | j |k r"| j| j  || _ dS dS )NTF)r(   r)   rw   )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.   ro   r%   rw   ZStreamStartTokenry   )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)
rR   rt   r*   r+   r.   ro   r%   rw   ZStreamEndTokenr#   )r   r   r   r   r   rT     s    

zScanner.fetch_stream_endc             C   s,   |  d |   d| _| j|   d S )Nr"   F)rR   rt   r*   r%   rw   scan_directive)r   r   r   r   rV     s    
zScanner.fetch_directivec             C   s   |  t d S )N)fetch_document_indicatorZDocumentStartToken)r   r   r   r   rX     s    zScanner.fetch_document_startc             C   s   |  t d S )N)r{   ZDocumentEndToken)r   r   r   r   rZ     s    zScanner.fetch_document_endc             C   sN   |  d |   d| _| j }| jd | j }| j||| d S )Nr"   F   )rR   rt   r*   r.   ro   forwardr%   rw   )r   
TokenClass
start_markend_markr   r   r   r{     s    


z Scanner.fetch_document_indicatorc             C   s   |  t d S )N)fetch_flow_collection_startZFlowSequenceStartToken)r   r   r   r   r[     s    z!Scanner.fetch_flow_sequence_startc             C   s   |  t d S )N)r   ZFlowMappingStartToken)r   r   r   r   r\     s    z Scanner.fetch_flow_mapping_startc             C   sP   |    |  jd7  _d| _| j }| j  | j }| j||| d S )Nr8   T)rv   r$   r*   r.   ro   r}   r%   rw   )r   r~   r   r   r   r   r   r     s    


z#Scanner.fetch_flow_collection_startc             C   s   |  t d S )N)fetch_flow_collection_endFlowSequenceEndToken)r   r   r   r   r]     s    zScanner.fetch_flow_sequence_endc             C   s   |  t d S )N)r   FlowMappingEndToken)r   r   r   r   r^     s    zScanner.fetch_flow_mapping_endc             C   sP   |    |  jd8  _d| _| j }| j  | j }| j||| d S )Nr8   F)rt   r$   r*   r.   ro   r}   r%   rw   )r   r~   r   r   r   r   r   r     s    


z!Scanner.fetch_flow_collection_endc             C   sB   d| _ |   | j }| j  | j }| jt|| d S )NT)r*   rt   r.   ro   r}   r%   rw   ZFlowEntryToken)r   r   r   r   r   r   r_     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   r.   ro   rx   r   r%   rw   ZBlockSequenceStartTokenrt   r}   ZBlockEntryToken)r   r   r   r   r   r   r   ra     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   r.   ro   rx   r   r%   rw   BlockMappingStartTokenrt   r}   KeyToken)r   r   r   r   r   r   r   rc   4  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$   r+   r%   insertr   r'   r   r   rx   r   r   r*   r   r.   ro   rw   rt   r}   
ValueToken)r   rr   r   r   r   r   r   r   re   P  s4    






zScanner.fetch_valuec             C   s$   |    d| _| j| t d S )NF)rv   r*   r%   rw   scan_anchorZ
AliasToken)r   r   r   r   rf     s    zScanner.fetch_aliasc             C   s$   |    d| _| j| t d S )NF)rv   r*   r%   rw   r   ZAnchorToken)r   r   r   r   rg     s    zScanner.fetch_anchorc             C   s"   |    d| _| j|   d S )NF)rv   r*   r%   rw   scan_tag)r   r   r   r   rh     s    zScanner.fetch_tagc             C   s   | j dd d S )NrM   )style)fetch_block_scalar)r   r   r   r   ri     s    zScanner.fetch_literalc             C   s   | j dd d S )NrN   )r   )r   )r   r   r   r   rj     s    zScanner.fetch_foldedc             C   s$   d| _ |   | j| | d S )NT)r*   rt   r%   rw   scan_block_scalar)r   r   r   r   r   r     s    zScanner.fetch_block_scalarc             C   s   | j dd d S )NrO   )r   )fetch_flow_scalar)r   r   r   r   rk     s    zScanner.fetch_singlec             C   s   | j dd d S )NrP   )r   )r   )r   r   r   r   rl     s    zScanner.fetch_doublec             C   s$   |    d| _| j| | d S )NF)rv   r*   r%   rw   scan_flow_scalar)r   r   r   r   r   r     s    zScanner.fetch_flow_scalarc             C   s"   |    d| _| j|   d S )NF)rv   r*   r%   rw   
scan_plain)r   r   r   r   rn     s    zScanner.fetch_plainc             C   s   | j jdkrdS d S )Nr   T)r.   r   )r   r   r   r   rU     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|   z---T)r.   r   prefixrS   _THE_END_SPACE_TAB)r   r   r   r   rW     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|   z...T)r.   r   r   rS   r   )r   r   r   r   rY     s
    zScanner.check_document_endc             C   s   | j dtkS )Nr8   )r.   rS   r   )r   r   r   r   r`     s    zScanner.check_block_entryc             C   s   t | jrdS | jdtkS )NTr8   )r2   r$   r.   rS   r   )r   r   r   r   rb     s    
zScanner.check_keyc             C   sH   | j dkrt| jr8dS nt| jr8| jddkr8dS | jdtkS )N)r8   r8   Tr8   z'"{[]})r/   r2   r$   r.   rS   r   )r   r   r   r   rd     s    

zScanner.check_valuec             C   s   | j  }| jdkrD|dkpB| j dtkoB|dkpB| j oB|dkS |dkrPdS | j d}|dkrp|tkrpdS |dkrt| jr|tkrdS | j dtko|dkp| j o|dkS )N)r8   r8   u      	
  -?:,[]{}#&*!|>'"%@`r8   rB   z?:TrJ   )r.   rS   r/   r   r$   r2   
_SPACE_TAB)r   rp   Zch1r   r   r   rm     s    

zScanner.check_plainc             C   s   | j jdkr$| j  dkr$| j   d}xl|sx| j  dkrJ| j   q0W | j  dkrxx| j  tkrv| j   q\W |  r| jsd| _q*d}q*W d S )Nr   u   ﻿F #T)r.   r   rS   r}   _THE_ENDscan_line_breakr$   r*   )r   foundr   r   r   rQ   '  s    
zScanner.scan_to_next_tokenc             C   s   | j  }| j   | |}d }|dkr@| |}| j  }nF|dkr^| |}| j  }n(| j  }x| j  tkr| j   qjW | | t	||||S )NZYAMLZTAG)
r.   ro   r}   scan_directive_namescan_yaml_directive_valuescan_tag_directive_valuerS   r   scan_directive_ignored_lineZDirectiveToken)r   r   namevaluer   r   r   r   rz   L  s    






zScanner.scan_directivec             C   s   d}| j |}xbd|  kr&dks\n d|  kr<dks\n d|  krRdks\n |dkrr|d	7 }| j |}qW |std
|dt| | j  | j |}| j | | j  }|dkrtd
|dt| | j  |S )Nr   09AZazz-_:.r8   zwhile scanning a directivez6expected alphabetic or numeric character, but found %ru     
  )r.   rS   r   r   ro   r   r}   )r   r   lengthrp   r   r   r   r   r   `  s(    D
zScanner.scan_directive_namec             C   s   x| j  dkr| j   qW | |}| j  dkrXtd|dt| j   | j  | j   | |}| j  dkrtd|dt| j   | j  ||fS )Nr   rC   zwhile scanning a directivez%expected a digit or '.', but found %ru     
  z%expected a digit or ' ', but found %r)r.   rS   r}   scan_yaml_directive_numberr   r   ro   )r   r   majorminorr   r   r   r   x  s$    


z!Scanner.scan_yaml_directive_valuec             C   s   | j  }d|  krdks<n td|dt| | j  d}x,d| j |  kr^dkrln n
|d7 }qBW t| j |}| j | |S )Nr   r   zwhile scanning a directivezexpected a digit, but found %rr   r8   )r.   rS   r   r   ro   intr   r}   )r   r   rp   r   r   r   r   r   r     s    

"z"Scanner.scan_yaml_directive_numberc             C   sX   x| j  dkr| j   qW | |}x| j  dkrD| j   q*W | |}||fS )Nr   )r.   rS   r}   scan_tag_directive_handlescan_tag_directive_prefix)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   zwhile scanning a directivezexpected ' ', but found %r)scan_tag_handler.   rS   r   r   ro   )r   r   r   rp   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   u     
  zwhile scanning a directivezexpected ' ', but found %r)scan_tag_urir.   rS   r   r   ro   )r   r   r   rp   r   r   r   r     s    

z!Scanner.scan_tag_directive_prefixc             C   s   x| j  dkr| j   qW | j  dkrJx| j  tkrH| j   q.W | j  }|tkrxtd|dt| | j  |   d S )Nr   r   zwhile scanning a directivez0expected a comment or a line break, but found %r)r.   rS   r}   r   r   r   ro   r   )r   r   rp   r   r   r   r     s    
z#Scanner.scan_directive_ignored_linec       	      C   s   | j  }| j  }|dkr"d}nd}| j   d}| j |}x t|r`|d7 }| j |}qBW |std| |dt| | j  | j |}| j | |dkrtd| |dt| | j  | j  }||||S )	Nr   aliasZanchorr   r8   zwhile scanning an %sz6expected alphabetic or numeric character, but found %ru     	
  ?:,[]{}%@`)r.   ro   rS   r}   r   r   r   r   )	r   r~   r   Z	indicatorr   r   rp   r   r   r   r   r   r     s2    





zScanner.scan_anchorc       	      C   sH  | j  }| j d}|dkrvd }| j d | d|}| j  dkrjtd|dt| j   | j  | j   n|tkrd }d}| j   nhd}d	}x.|d
kr|dkrd}P |d7 }| j |}qW d}|r| d|}nd}| j   | d|}| j  }|d
kr*td|dt| | j  ||f}| j  }t	|||S )Nr8   <   tagrN   zwhile parsing a tagzexpected '>', but found %rrL   Fu     
  Tzwhile scanning a tagzexpected ' ', but found %r)
r.   ro   rS   r}   r   r   r   r   r   ZTagToken)	r   r   rp   r   suffixr   Z
use_handler   r   r   r   r   r     sL    






zScanner.scan_tagc             C   s  |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}x"| j j|kr| j  d	kr|| | j  d
k}d}x | j |tkr"|d7 }qW || j | | j | |  }| |\}}
|dkr|dkr|  s|  rP | j j|kr| j  d	kr|r|dkr|r| j  d
kr|s|d n
|| qP qW g }|dkr|| |dkr|| n|dkr,|| td|d||
|}t|dkr|  }x"|rz||d  |  }qZW | j  }td||
|}|| |S )NrN   TFr8   z|>)r8   r8   Z0top_level_block_style_scalar_no_indent_error_1_1 r@   z 	r   
r   )NT)NF)r.   ro   r}   scan_block_scalar_indicatorsscan_block_scalar_ignored_liner(   r/   r    r   scan_block_scalar_indentationmaxscan_block_scalar_breaksr   rS   extendr   rw   r   r   rW   rY   ScalarTokenjoinru   rQ   CommentTokenadd_post_comment)r   r   Zfoldedchunksr   chomping	incrementZ
min_indentbreaks
max_indentr   r(   
line_breakZleading_non_spacer   Ztrailingtokenr>   Zcomment_end_markr   r   r   r   %  sz    




"







zScanner.scan_block_scalarc             C   s  d }d }| j  }|dkrx|dkr(d}nd}| j   | j  }|dkrt|}|dkrltd|d| j  | j   nd|dkrt|}|dkrtd|d| j  | j   | j  }|dkr|dkrd}nd}| j   | j  }|d	krtd|d
t| | j  ||fS )Nz+-+TF
0123456789r   zwhile scanning a block scalarz<expected indentation indicator in the range 1-9, but found 0u     
  z9expected chomping or indentation indicators, but found %r)r.   rS   r}   r   r   ro   r   )r   r   r   r   rp   r   r   r   r     sL    







z$Scanner.scan_block_scalar_indicatorsc             C   s   x| j  dkr| j   qW | j  dkrJx| j  tkrH| j   q.W | j  }|tkrxtd|dt| | j  |   d S )Nr   r   zwhile scanning a block scalarz0expected a comment or a line break, but found %r)r.   rS   r}   r   r   r   ro   r   )r   r   rp   r   r   r   r     s    
z&Scanner.scan_block_scalar_ignored_linec             C   sv   g }d}| j  }xX| j  dkrj| j  dkrJ||   | j  }q| j   | j j|kr| j j}qW |||fS )Nr   u    
  r   )r.   ro   rS   rw   r   r}   r   )r   r   r   r   r   r   r   r     s    

z%Scanner.scan_block_scalar_indentationc             C   s   g }| j  }x(| j j|k r6| j  dkr6| j   qW xT| j  dkr||   | j  }x(| j j|k r| j  dkr| j   qbW q:W ||fS )Nr   u
   
  )r.   ro   r   rS   r}   rw   r   )r   r(   r   r   r   r   r   r     s    

z Scanner.scan_block_scalar_breaksc             C   s   |dkrd}nd}g }| j  }| j  }| j   || || x6| j  |kr||| || || || qHW | j   | j  }td|d|||S )NrP   TFr   )	r.   ro   rS   r}   r   scan_flow_scalar_non_spacesscan_flow_scalar_spacesr   r   )r   r   doubler   r   Zquoter   r   r   r   r     s    




zScanner.scan_flow_scalarr@   	r   r   rP   /\       u    u    )r   r   btr   nvfrer   rP   r   r   N_LPr         )xuUc          
   C   s  g }xd}x| j |dkr(|d7 }qW |dkrP|| j | | j | | j  }|s|dkr| j ddkr|d | j d q|r|dks|s|dkr|| | j   q|r|dkr| j   | j  }|| jkr|| j|  | j   n|| jkr| j| }| j   xLt|D ]@}| j |dkr2td	|d
|t	| j |f | j 
 q2W t| j |d}|t| | j | nB|dkr|   || || ntd	|dt	| | j 
 q|S qW d S )Nr   u   '"\  	
  r8   rO   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.   rS   rw   r   r}   ESCAPE_REPLACEMENTSESCAPE_CODESranger   r   ro   r   r	   r   r   scan_flow_scalar_breaks)r   r   r   r   r   rp   kcoder   r   r   r     sV    






&

z#Scanner.scan_flow_scalar_non_spacesc       	      C   s   g }d}x| j |dkr$|d7 }q
W | j |}| j | | j  }|dkrftd|d| j  nT|dkr|  }| ||}|dkr|| n|s|d	 |	| n
|| |S )
Nr   z 	r8   r@   zwhile scanning a quoted scalarzfound unexpected end of streamu
   
  r   r   )
r.   rS   r   r}   r   ro   r   r   rw   r   )	r   r   r   r   r   whitespacesrp   r   r   r   r   r   r   P  s*    


zScanner.scan_flow_scalar_spacesc             C   s   g }x| j d}|dks"|dkrF| j dtkrFtd|d| j  x| j  dkrb| j   qHW | j  dkr||   q|S qW d S )Nr|   z---z...zwhile scanning a quoted scalarz#found unexpected document separatorz 	u
   
  )	r.   r   rS   r   r   ro   r}   rw   r   )r   r   r   r   r   r   r   r   r   j  s    zScanner.scan_flow_scalar_breaksc       
      C   s  g }| j  }|}| jd }g }xbd}| j  dkr8P x| j |}|dkrd| j |d tkrdnN|dkrx| jdkrxn:|tks| js|dkr| j |d tks| jr|dkrP |d7 }q:W | jr|dkr| j |d dkr| j | td	|d
| j  d|dkrP d| _	|
| || j | | j | | j  }| ||}|r| j  dks| js$| j j|k r$P q$W td|d||}|r|d dkrtd|d ||}	||	 |S )Nr8   r   r   rJ   rI   )r8   r8   z,:?[]{}u     	
  ,[]{}zwhile scanning a plain scalarzfound unexpected ':'zGPlease check http://pyyaml.org/wiki/YAMLColonInFlowContext for details.Fr   Tr   )r.   ro   r(   rS   r   r/   r$   r}   r   r*   r   rw   r   scan_plain_spacesr   r   r   r   r   )
r   r   r   r   r(   Zspacesr   rp   r   r>   r   r   r   r     sZ    






zScanner.scan_plainc       
      C   sF  g }d}x| j |dkr$|d7 }q
W | j |}| j | | j  }|dkr2|  }d| _| j d}|dks||dkr| j dtkrd S g }	xj| j  d	kr| j  dkr| j   q|	|   | j d}|dks|dkr| j dtkrd S qW |d
kr|| n|	s&|d ||	 n|rB|| |S )Nr   r   r8   u
   
  Tr|   z---z...u    
  r   )	r.   rS   r   r}   r   r*   r   rw   r   )
r   r(   r   r   r   r   rp   r   r   r   r   r   r   r     s>    




zScanner.scan_plain_spacesc             C   s  | j  }|dkr2td| |dt| | j  d}| j |}|dkrxbd|  kr`dksn d|  krvd	ksn d
|  krdksn |dkr|d7 }| j |}qLW |dkr| j | td| |dt| | j  |d7 }| j |}| j | |S )NrL   zwhile scanning a %szexpected '!', but found %rr8   r   r   r   r   r   r   r   z-_)r.   rS   r   r   ro   r}   r   )r   r   r   rp   r   r   r   r   r   r     s,    


.

zScanner.scan_tag_handlec             C   s  g }d}| j |}xd|  kr*dks`n d|  kr@dks`n d|  krVdks`n |dkr|d	kr|| j | | j | d}|| || n|d
7 }| j |}qW |dkr|| j | | j | d}|std| |dt| | j  d	|S )Nr   r   r   r   r   r   r   z-;/?:@&=+$,_.!~*'()[]%rA   r8   zwhile parsing a %szexpected URI, but found %rr   )
r.   rS   rw   r   r}   scan_uri_escapesr   r   ro   r   )r   r   r   r   r   rp   r   r   r   r     s*    D

zScanner.scan_tag_uric          
   C   s$  g }| j  }x| j  dkr| j   xHtdD ]<}| j |dkr2td| |dt| j | | j  q2W tr|t	| j 
dd n|tt	| j 
dd | j d qW y(trt|d}ntd|d}W n: tk
r } ztd| |t||W d d }~X Y nX |S )	NrA   r   r   zwhile scanning a %szBexpected URI escape sequence of 2 hexdecimal numbers, but found %rr   zutf-8    )r.   ro   rS   r}   r   r   r   r
   rw   r   r   chrbytesdecodeZunicoder   UnicodeDecodeErrorstr)r   r   r   Z
code_bytesr   r   r   excr   r   r   r     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 )Nu   
r   z
r   u     r   )r.   rS   r   r}   )r   rp   r   r   r   r   7  s    



zScanner.scan_line_break)N)Qr   r   r   r   r!   propertyr.   r/   r6   r7   r:   r0   r?   r1   r<   r;   rv   rt   rR   rx   r&   rT   rV   rX   rZ   r{   r[   r\   r   r]   r^   r   r_   ra   rc   re   rf   rg   rh   ri   rj   r   rk   rl   r   rn   rU   rW   rY   r`   rb   rd   rm   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   r   r   r   r   r   B   s   
6	m
8							"%*,j-2>&c               @   sF   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S )r   c             G   sV   x|   r|   qW |   t| jrR|s0dS x |D ]}t| jd |r6dS q6W dS )NTr   F)r0   r1   _gather_commentsr2   r%   r3   )r   r4   r5   r   r   r   r6   O  s    


zRoundTripScanner.check_tokenc             C   s6   x|   r|   qW |   t| jr2| jd S d S )Nr   )r0   r1   r   r2   r%   )r   r   r   r   r7   ]  s    


zRoundTripScanner.peek_tokenc             C   s   g }| j s|S t| j d trB| j d}|  jd7  _|| xR|  r|   | j s^|S t| j d trD|  jd7  _| j d}|| qDW t|dkr| j d 	| | j
st| j dk r|   dS )zcombine multiple comment linesr   r8   r   N)r%   r3   r   r9   r'   rw   r0   r1   ru   Zadd_pre_commentsr#   )r   Zcommentsr>   r   r   r   r   g  s&    

z!RoundTripScanner._gather_commentsc             C   s   x|   r|   qW |   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 )Nr8   r   )r0   r1   r   r2   r%   ru   r3   r   r   r   r   r   r   r   r   r'   r   r9   )r   r   r   r   r:     s    


zRoundTripScanner.get_tokenc             C   sD   |\}}}x |r*|d dkr*|d d }qW | j t||| d S )Nr"   r   )r%   rw   r   )r   r>   r   r   r   r   r   r   r?     s    
zRoundTripScanner.fetch_commentc             C   s  | j jdkr$| j  dkr$| j   d}xx|sx| j  dkrN| j   q4W | j  }|dkr| j  }|}| j   x2|tkr| j  }|dkrP ||7 }| j   q|W |  }x t|dkr||7 }|  }qW | j  }| jsd| _	|||fS t
|  r| j  }| jsd| _	| j  }|dkr| j  }d	}x |r`| jdd
}||7 }qBW | j  dkr|ddd d }| j  }|||fS q,d}q,W d S )Nr   u   ﻿Fr   r   r@   Tr   r   )
empty_liner8   )r.   r   rS   r}   ro   r   r   ru   r$   r*   r2   rsplit)r   r   rp   r   r>   r   r   r   r   rQ     sT    













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 )Nu   
r   z
r   u     z	 r   )r.   rS   r   r}   )r   r   rp   r   r   r   r     s    




z RoundTripScanner.scan_line_breakN)F)
r   r   r   r6   r7   r   r:   r?   rQ   r   r   r   r   r   r   N  s   
CN)Z
__future__r   r   r   r   Zruamel_yaml.errorr   Zruamel_yaml.tokensZruamel_yaml.compatr   r	   r
   r   r   __all__r   r   r   r   objectr   r   r   r   r   r   r   <module>   s.   
            