3
<zW                 @   sL   d dgZ ddlmZ ddlT G dd deZG dd dZG dd  d Zd	S )
ScannerScannerError   )MarkedYAMLError)*c               @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r	   r	   ./usr/lib/python3/dist-packages/yaml/scanner.pyr       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__&   s    zSimpleKey.__init__N)r   r   r   r   r	   r	   r	   r
   r   #   s   r   c               @   sx  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 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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsdt Z<dudv Z=dwdx Z>dydz Z?d{d| Z@d}d~ddddddddddddddddZAddddZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdS )r   c             C   s<   d| _ d| _g | _| j  d| _d| _g | _d| _i | _dS )zInitialize the scanner.F    r   TN)	done
flow_leveltokensfetch_stream_starttokens_takenindentindentsallow_simple_keypossible_simple_keys)r   r	   r	   r
   r   0   s    zScanner.__init__c             G   sJ   x| j  r| j  qW | jrF|s$dS x |D ]}t| jd |r*dS q*W dS )NTr   F)need_more_tokensfetch_more_tokensr   
isinstance)r   choicesZchoicer	   r	   r
   check_tokenq   s    

zScanner.check_tokenc             C   s*   x| j  r| j  qW | jr&| jd S d S )Nr   )r   r    r   )r   r	   r	   r
   
peek_token}   s    
zScanner.peek_tokenc             C   s:   x| j  r| j  qW | jr6|  jd7  _| jjdS d S )Nr   r   )r   r    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  | j | jkr.dS d S )NFT)r   r   stale_possible_simple_keysnext_possible_simple_keyr   )r   r	   r	   r
   r      s    zScanner.need_more_tokensc             C   s  | j   | j  | j| j | j }|dkr4| j S |dkrL| j rL| j S |dkrd| j rd| j	 S |dkr|| j
 r|| j S |dkr| j S |dkr| j S |dkr| j S |dkr| j S |d	kr| j S |dkr| j r| j S |d
kr| j r| j S |dkr| j r| j S |dkr*| j S |dkr<| j S |dkrN| j S |dkrj| j rj| j S |dkr| j r| j S |dkr| j S |dkr| j S | j r| j  S t!dd d| | j" d S )N %-.[{]},?:r   &!|>'"z!while scanning for the next tokenz.found character %r that cannot start any token)#scan_to_next_tokenr'   unwind_indentr   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   get_mark)r   chr	   r	   r
   r       s^    	





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   s`   xZt | jD ]L}| j| }|j| jks6| j|j dkr|jrPt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   rX   )r   rZ   r[   r	   r	   r
   r'     s    
z"Scanner.stale_possible_simple_keysc             C   s^   | j  o| j| jk}| jrZ| j  | jt| j }t||| j	| j
| j| j }|| j| j < d S )N)r   r   r   r   remove_possible_simple_keyr   lenr   r   r   r   rX   r   )r   r   r   r[   r	   r	   r
   save_possible_simple_key$  s    z Scanner.save_possible_simple_keyc             C   s@   | j | jkr<| j| j  }|jr2td|jd| j | j| j = d S )Nzwhile scanning a simple keyzcould not find expected ':')r   r   r   r   r   rX   )r   r[   r	   r	   r
   r]   5  s    z"Scanner.remove_possible_simple_keyc             C   sD   | j r
d S x4| j|kr>| j }| jj | _| jjt|| qW d S )N)r   r   rX   r   r%   r   appendZBlockEndToken)r   r   r   r	   r	   r
   r;   B  s    zScanner.unwind_indentc             C   s&   | j |k r"| jj| j  || _ dS dS )NTF)r   r   r`   )r   r   r	   r	   r
   
add_indentZ  s
    
zScanner.add_indentc             C   s$   | j  }| jjt||| jd d S )N)encoding)rX   r   r`   ZStreamStartTokenrb   )r   r   r	   r	   r
   r   d  s    zScanner.fetch_stream_startc             C   sB   | j d | j  d| _i | _| j }| jjt|| d| _d S )Nr   FTr   )	r;   r]   r   r   rX   r   r`   ZStreamEndTokenr   )r   r   r	   r	   r
   r=   p  s    
zScanner.fetch_stream_endc             C   s,   | j d | j  d| _| jj| j  d S )Nr   Fr   )r;   r]   r   r   r`   scan_directive)r   r	   r	   r
   r?     s    
zScanner.fetch_directivec             C   s   | j t d S )N)fetch_document_indicatorZDocumentStartToken)r   r	   r	   r
   rA     s    zScanner.fetch_document_startc             C   s   | j t d S )N)rd   ZDocumentEndToken)r   r	   r	   r
   rC     s    zScanner.fetch_document_endc             C   sH   | j d | j  d| _| j }| jd | j }| jj||| d S )Nr   F   r   )r;   r]   r   rX   forwardr   r`   )r   
TokenClass
start_markend_markr	   r	   r
   rd     s    

z Scanner.fetch_document_indicatorc             C   s   | j t d S )N)fetch_flow_collection_startZFlowSequenceStartToken)r   r	   r	   r
   rD     s    z!Scanner.fetch_flow_sequence_startc             C   s   | j t d S )N)rj   ZFlowMappingStartToken)r   r	   r	   r
   rE     s    z Scanner.fetch_flow_mapping_startc             C   sJ   | j   |  jd7  _d| _| j }| j  | j }| jj||| d S )Nr   T)r_   r   r   rX   rf   r   r`   )r   rg   rh   ri   r	   r	   r
   rj     s    z#Scanner.fetch_flow_collection_startc             C   s   | j t d S )N)fetch_flow_collection_endZFlowSequenceEndToken)r   r	   r	   r
   rF     s    zScanner.fetch_flow_sequence_endc             C   s   | j t d S )N)rk   ZFlowMappingEndToken)r   r	   r	   r
   rG     s    zScanner.fetch_flow_mapping_endc             C   sJ   | j   |  jd8  _d| _| j }| j  | j }| jj||| d S )Nr   F)r]   r   r   rX   rf   r   r`   )r   rg   rh   ri   r	   r	   r
   rk     s    z!Scanner.fetch_flow_collection_endc             C   s<   d| _ | j  | j }| j  | j }| jjt|| d S )NT)r   r]   rX   rf   r   r`   ZFlowEntryToken)r   rh   ri   r	   r	   r
   rH     s    zScanner.fetch_flow_entryc             C   s   | j sF| jstd d d| j | j| jrF| j }| jjt|| n d| _| j	  | j }| j
  | j }| jjt|| d S )Nz%sequence entries are not allowed hereT)r   r   r   rX   ra   r   r   r`   ZBlockSequenceStartTokenr]   rf   ZBlockEntryToken)r   r   rh   ri   r	   r	   r
   rJ     s    
zScanner.fetch_block_entryc             C   s   | j sD| jstd d d| j | j| jrD| j }| jjt|| | j  | _| j	  | j }| j
  | j }| jjt|| d S )Nz!mapping keys are not allowed here)r   r   r   rX   ra   r   r   r`   BlockMappingStartTokenr]   rf   KeyToken)r   r   rh   ri   r	   r	   r
   rL     s    

zScanner.fetch_keyc             C   s  | j | jkr|| j| j  }| j| j = | jj|j| j t|j|j | j st| j|j	rt| jj|j| j t
|j|j d| _n\| j s| jstd d d| j | j s| j| j	r| j }| jjt
|| | j  | _| j  | j }| j  | j }| jjt|| d S )NFz#mapping values are not allowed here)r   r   r   insertr   r   rm   r   ra   r   rl   r   r   rX   r`   r]   rf   Z
ValueToken)r   r[   r   rh   ri   r	   r	   r
   rN     s2    


zScanner.fetch_valuec             C   s$   | j   d| _| jj| jt d S )NF)r_   r   r   r`   scan_anchorZ
AliasToken)r   r	   r	   r
   rO   V  s    zScanner.fetch_aliasc             C   s$   | j   d| _| jj| jt d S )NF)r_   r   r   r`   ro   ZAnchorToken)r   r	   r	   r
   rP   a  s    zScanner.fetch_anchorc             C   s"   | j   d| _| jj| j  d S )NF)r_   r   r   r`   scan_tag)r   r	   r	   r
   rQ   l  s    zScanner.fetch_tagc             C   s   | j dd d S )Nr6   )style)fetch_block_scalar)r   r	   r	   r
   rR   w  s    zScanner.fetch_literalc             C   s   | j dd d S )Nr7   )rq   )rr   )r   r	   r	   r
   rS   z  s    zScanner.fetch_foldedc             C   s$   d| _ | j  | jj| j| d S )NT)r   r]   r   r`   scan_block_scalar)r   rq   r	   r	   r
   rr   }  s    zScanner.fetch_block_scalarc             C   s   | j dd d S )Nr8   )rq   )fetch_flow_scalar)r   r	   r	   r
   rT     s    zScanner.fetch_singlec             C   s   | j dd d S )Nr9   )rq   )rt   )r   r	   r	   r
   rU     s    zScanner.fetch_doublec             C   s$   | j   d| _| jj| j| d S )NF)r_   r   r   r`   scan_flow_scalar)r   rq   r	   r	   r
   rt     s    zScanner.fetch_flow_scalarc             C   s"   | j   d| _| jj| j  d S )NF)r_   r   r   r`   
scan_plain)r   r	   r	   r
   rW     s    zScanner.fetch_plainc             C   s   | j dkrdS d S )Nr   T)r   )r   r	   r	   r
   r>     s    
zScanner.check_directivec             C   s.   | j dkr*| jddkr*| jddkr*dS d S )Nr   re   z---u     	
  T)r   prefixr<   )r   r	   r	   r
   r@     s    
zScanner.check_document_startc             C   s.   | j dkr*| jddkr*| jddkr*dS d S )Nr   re   z...u     	
  T)r   rw   r<   )r   r	   r	   r
   rB     s    
zScanner.check_document_endc             C   s   | j ddkS )Nr   u     	
  )r<   )r   r	   r	   r
   rI     s    zScanner.check_block_entryc             C   s   | j r
dS | jddkS d S )NTr   u     	
  )r   r<   )r   r	   r	   r
   rK     s    zScanner.check_keyc             C   s   | j r
dS | jddkS d S )NTr   u     	
  )r   r<   )r   r	   r	   r
   rM     s    zScanner.check_valuec             C   s6   | j  }|dkp4| j ddko4|dkp4| j o4|dkS )Nu      	
  -?:,[]{}#&*!|>'"%@`r   u     	
  r+   z?:)r<   r   )r   rY   r	   r	   r
   rV     s    zScanner.check_plainc             C   s   | j dkr| j dkr| j  d}xb|sx| j dkr@| j  q*W | j dkrhx| j dkrf| j  qPW | j r~| jsd| _q$d}q$W d S )Nr   u   ﻿F #u    
  T)r   r<   rf   scan_line_breakr   r   )r   foundr	   r	   r
   r:     s    zScanner.scan_to_next_tokenc             C   s   | j  }| j  | j|}d }|dkr:| j|}| j  }n>|dkrV| j|}| j  }n"| j  }x| j dkrv| j  q`W | j| t||||S )NZYAMLZTAGu    
  )rX   rf   scan_directive_namescan_yaml_directive_valuescan_tag_directive_valuer<   scan_directive_ignored_lineZDirectiveToken)r   rh   namevalueri   r	   r	   r
   rc     s    





zScanner.scan_directivec             C   s   d}| j |}xfd|  ko"dkn  s`d|  ko:dkn  s`d|  koRdkn  s`|dkrt|d	7 }| j |}qW |std
|d| | j | j|}| j| | j  }|dkrtd
|d| | j |S )Nr   09AZazz-_r   zwhile scanning a directivez6expected alphabetic or numeric character, but found %ru     
  )r<   r   rX   rw   rf   )r   rh   lengthrY   r   r	   r	   r
   r|   #  s$    
J

zScanner.scan_directive_namec             C   s   x| j  dkr| j  qW | j|}| j  dkrJtd|d| j   | j | j  | j|}| j  dkrtd|d| j   | j ||fS )Nrx   r,   zwhile scanning a directivez%expected a digit or '.', but found %ru     
  z%expected a digit or ' ', but found %r)r<   rf   scan_yaml_directive_numberr   rX   )r   rh   majorminorr	   r	   r
   r}   8  s    





z!Scanner.scan_yaml_directive_valuec             C   s   | j  }d|  kodkn  s6td|d| | j d}x*d| j |  koTdkn  rd|d7 }q<W t| j|}| j| |S )Nr   r   zwhile scanning a directivezexpected a digit, but found %rr   r   )r<   r   rX   intrw   rf   )r   rh   rY   r   r   r	   r	   r
   r   I  s     
z"Scanner.scan_yaml_directive_numberc             C   sP   x| j  dkr| j  qW | j|}x| j  dkr<| j  q&W | j|}||fS )Nrx   )r<   rf   scan_tag_directive_handlescan_tag_directive_prefix)r   rh   handlerw   r	   r	   r
   r~   V  s    

z Scanner.scan_tag_directive_valuec             C   s6   | j d|}| j }|dkr2td|d| | j |S )N	directiverx   zwhile scanning a directivezexpected ' ', but found %r)scan_tag_handler<   r   rX   )r   rh   r   rY   r	   r	   r
   r   `  s    z!Scanner.scan_tag_directive_handlec             C   s6   | j d|}| j }|dkr2td|d| | j |S )Nr   u     
  zwhile scanning a directivezexpected ' ', but found %r)scan_tag_urir<   r   rX   )r   rh   r   rY   r	   r	   r
   r   i  s    z!Scanner.scan_tag_directive_prefixc             C   sr   x| j  dkr| j  qW | j  dkr@x| j  dkr>| j  q(W | j  }|dkrftd|d| | j | j  d S )Nrx   ry   u    
  zwhile scanning a directivez0expected a comment or a line break, but found %r)r<   rf   r   rX   rz   )r   rh   rY   r	   r	   r
   r   r  s    z#Scanner.scan_directive_ignored_linec       	      C   s  | j  }| j }|dkrd}nd}| j  d}| j|}xfd|  koLdkn  sd|  koddkn  sd	|  ko|d
kn  s|dkr|d7 }| j|}q:W |std| |d| | j  | j|}| j| | j }|dkrtd| |d| | j  | j  }||||S )Nr   aliasZanchorr   r   r   r   r   r   r   z-_r   zwhile scanning an %sz6expected alphabetic or numeric character, but found %ru     	
  ?:,]}%@`)rX   r<   rf   r   rw   )	r   rg   rh   Z	indicatorr   r   rY   r   ri   r	   r	   r
   ro     s2    	
J



zScanner.scan_anchorc       	      C   s&  | j  }| jd}|dkrdd }| jd | jd|}| j dkrZtd|d| j  | j  | j  n~|dkr~d }d	}| j  ndd}d
}x,|dkr|d	krd}P |d7 }| j|}qW d	}|r| jd|}nd	}| j  | jd|}| j }|dkr
td|d| | j  ||f}| j  }t|||S )Nr   <   tagr7   zwhile parsing a tagzexpected '>', but found %ru     	
  r5   Fu     
  Tzwhile scanning a tagzexpected ' ', but found %r)rX   r<   rf   r   r   r   ZTagToken)	r   rh   rY   r   suffixr   Z
use_handler   ri   r	   r	   r
   rp     sH    







zScanner.scan_tagc             C   s  |dkrd}nd}g }| j  }| j  | j|\}}| j| | jd }|dk rTd}|d krv| j \}}	}
t||	}n|| d }| j|\}}
d}x| j|ko| j	 dkrt|j
| | j	 dk}d}x| j	|d	kr|d7 }qW |j| j| | j| | j }| j|\}}
| j|krp| j	 dkrp|rd|d
krd|rd| j	 dkrd|sn|jd n
|j| qP qW |dk	r|j| |dkr|j
| tdj|d||
|S )Nr7   TFr    r)   z 	r   u    
  
rx   )rX   rf   scan_block_scalar_indicatorsscan_block_scalar_ignored_liner   scan_block_scalar_indentationmaxscan_block_scalar_breaksr   r<   extendr`   rw   rz   ScalarTokenjoin)r   rq   Zfoldedchunksrh   chomping	incrementZ
min_indentbreaks
max_indentri   r   
line_breakZleading_non_spacer   r	   r	   r
   rs     sP    







zScanner.scan_block_scalarc             C   s   d }d }| j  }|dkrn|dkr&d}nd}| j  | j  }|dkrt|}|dkrdtd|d| j | j  n\|dkrt|}|dkrtd|d| j | j  | j  }|dkr|dkrd}nd}| j  | j  }|d	krtd|d
| | 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<   rf   r   r   rX   )r   rh   r   r   rY   r	   r	   r
   r     sF    


z$Scanner.scan_block_scalar_indicatorsc             C   sr   x| j  dkr| j  qW | j  dkr@x| j  dkr>| j  q(W | j  }|dkrftd|d| | j | j  d S )Nrx   ry   u    
  zwhile scanning a block scalarz0expected a comment or a line break, but found %r)r<   rf   r   rX   rz   )r   rh   rY   r	   r	   r
   r   A  s    
z&Scanner.scan_block_scalar_ignored_linec             C   sh   g }d}| j  }xL| j dkr\| j dkrB|j| j  | j  }q| j  | j|kr| j}qW |||fS )Nr   u    
  rx   )rX   r<   r`   rz   rf   r   )r   r   r   ri   r	   r	   r
   r   O  s    


z%Scanner.scan_block_scalar_indentationc             C   s   g }| j  }x"| j|k r.| j dkr.| j  qW xJ| j dkrz|j| j  | j  }x"| j|k rv| j dkrv| j  qVW q2W ||fS )Nrx   u
   
  )rX   r   r<   rf   r`   rz   )r   r   r   ri   r	   r	   r
   r   ^  s    z Scanner.scan_block_scalar_breaksc             C   s   |dkrd}nd}g }| j  }| j }| j  |j| j|| x4| j |krt|j| j|| |j| j|| qBW | j  | j  }tdj|d|||S )Nr9   TFr   )rX   r<   rf   r   scan_flow_scalar_non_spacesscan_flow_scalar_spacesr   r   )r   rq   doubler   rh   Zquoteri   r	   r	   r
   ru   k  s    zScanner.scan_flow_scalarr)   	r   rx   r9   \       u    u    )r   r   btr   nvfrerx   r9   r   N_LPr         )xuUc             C   s  g }xd}x| j |dkr&|d7 }qW |rF|j| j| | j| | j  }| r|dkr| j ddkr|jd | jd q|r|dks| r|dkr|j| | j  q|o|dkr| j  | j  }|| jkr|j| j|  | j  n|| jkr|| j| }| j  xBt|D ]6}| j |dkrtd	|d
|| j |f | j qW t	| j|d}|jt
| | j| n<|dkr| j  |j| j|| ntd	|d| | j q|S qW d S )Nr   u   '"\  	
  r   r8   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<   r`   rw   rf   ESCAPE_REPLACEMENTSESCAPE_CODESranger   rX   r   chrrz   r   scan_flow_scalar_breaks)r   r   rh   r   r   rY   kcoder	   r	   r
   r     sL    







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r\td|d| j nT|dkr| j }| j||}|dkr|j| n|s|jd	 |j| n
|j| |S )
Nr   z 	r   r)   zwhile scanning a quoted scalarzfound unexpected end of streamu
   
  r   rx   )	r<   rw   rf   r   rX   rz   r   r`   r   )	r   r   rh   r   r   whitespacesrY   r   r   r	   r	   r
   r     s(    



zScanner.scan_flow_scalar_spacesc             C   s   g }xx| j d}|dks |dkr@| jddkr@td|d| j x| j dkrX| j  qBW | j dkrv|j| j  q|S qW d S )	Nre   z---z...u     	
  zwhile scanning a quoted scalarz#found unexpected document separatorz 	u
   
  )rw   r<   r   rX   rf   r`   rz   )r   r   rh   r   rw   r	   r	   r
   r     s    
zScanner.scan_flow_scalar_breaksc             C   sN  g }| j  }|}| jd }g }xd}| j dkr4P xP| j|}|dksx| j rj|dkrj| j|d dksx| jrz|dkrzP |d7 }q6W | jr|dkr| j|d dkr| j| td|d	| j  d
|dkrP d| _|j| |j| j	| | j| | j  }| j
||}| s4| j dks4| j r"| j|k r"P q"W tdj|d||S )Nr   r   ry   u     	
  r3   z,:?[]{}u     	
  ,[]{}zwhile scanning a plain scalarzfound unexpected ':'zGPlease check http://pyyaml.org/wiki/YAMLColonInFlowContext for details.Fr   T)rX   r   r<   r   rf   r   r   r   r`   rw   scan_plain_spacesr   r   r   )r   r   rh   ri   r   Zspacesr   rY   r	   r	   r
   rv     sF    




zScanner.scan_plainc       
      C   s.  g }d}x| j |dkr"|d7 }q
W | j|}| j| | j  }|dkr| j }d| _| jd}|dksr|dkr| j dd	krd S g }	x`| j  d
kr| j  dkr| j  q|	j| j  | jd}|dks|dkr| j dd	krd S qW |dkr|j| n|	s|jd |j|	 n|r*|j| |S )Nr   rx   r   u
   
  Tre   z---z...u     	
  u    
  r   )r<   rw   rf   rz   r   r`   r   )
r   r   rh   r   r   r   rY   r   rw   r   r	   r	   r
   r   !  s>    







zScanner.scan_plain_spacesc             C   s   | j  }|dkr*td| |d| | j d}| j |}|dkrxfd|  koTdkn  sd|  kold	kn  sd
|  kodkn  s|dkr|d7 }| j |}qBW |dkr| j| td| |d| | j |d7 }| j|}| j| |S )Nr5   zwhile scanning a %szexpected '!', but found %rr   rx   r   r   r   r   r   r   z-_)r<   r   rX   rf   rw   )r   r   rh   rY   r   r   r	   r	   r
   r   F  s&    

J



zScanner.scan_tag_handlec             C   s   g }d}| j |}xd|  ko&dkn  sdd|  ko>dkn  sdd|  koVdkn  sd|dkr|d	kr|j| j| | j| d}|j| j|| n|d
7 }| j |}qW |r|j| j| | j| d}|std| |d| | j dj|S )Nr   r   r   r   r   r   r   z-;/?:@&=+$,_.!~*'()[]%r*   r   zwhile parsing a %szexpected URI, but found %rr   )r<   r`   rw   rf   scan_uri_escapesr   rX   r   )r   r   rh   r   r   rY   r	   r	   r
   r   ^  s(    
J


zScanner.scan_tag_uric             C   s   g }| j  }xx| j dkr| j  x>tdD ]2}| j|dkr,td| |d| j| | j  q,W |jt| jdd | jd qW yt|j	d}W n8 t
k
r } ztd| |t||W Y d d }~X nX |S )Nr*   r   r   zwhile scanning a %szBexpected URI escape sequence of 2 hexdecimal numbers, but found %rr   zutf-8)rX   r<   rf   r   r   r`   r   rw   bytesdecodeUnicodeDecodeErrorstr)r   r   rh   Zcodesr   r   r   excr	   r	   r
   r   w  s     
(zScanner.scan_uri_escapesc             C   sN   | j  }|dkr6| jddkr*| jd n| j  dS |dkrJ| j  |S dS )Nu   
r   z
r   u     r   )r<   rw   rf   )r   rY   r	   r	   r
   rz     s    	zScanner.scan_line_breakN)Lr   r   r   r   r#   r$   r&   r   r    r(   r'   r_   r]   r;   ra   r   r=   r?   rA   rC   rd   rD   rE   rj   rF   rG   rk   rH   rJ   rL   rN   rO   rP   rQ   rR   rS   rr   rT   rU   rt   rW   r>   r@   rB   rI   rK   rM   rV   r:   rc   r|   r}   r   r~   r   r   r   ro   rp   rs   r   r   r   r   ru   r   r   r   r   r   rv   r   r   r   r   rz   r	   r	   r	   r
   r   .   s   A
l
!8

#
		$)L(+/%N)__all__errorr   r   r   r   r   r	   r	   r	   r
   <module>   s
   