U mÃfOÈã@sLddgZddlmZddlTGdd„deƒZGdd„dƒZGdd„dƒZd S) ÚScannerÚ ScannerErroré)ÚMarkedYAMLError)Ú*c@s eZdZdS)rN)Ú__name__Ú __module__Ú __qualname__©r r ú„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„Zdydz„Z?d{d|„Z@d}d~dd€d€dd‚dƒd„d…d†d‡dˆd‰dŠd‹dŒddŽœZAddd‘d’œZBd“d”„ZCd•d–„ZDd—d˜„ZEd™dš„ZFd›dœ„ZGddž„ZHdŸd „ZId¡d¢„ZJd£d¤„ZKd¥S)¦rcCs<d|_d|_g|_| ¡d|_d|_g|_d|_i|_dS)zInitialize the scanner.FééÿÿÿÿTN) ÚdoneÚ flow_levelÚtokensÚfetch_stream_startÚ tokens_takenÚindentÚindentsÚallow_simple_keyÚpossible_simple_keys©rr r r r0s zScanner.__init__cGsD| ¡r| ¡q|jr@|s dS|D]}t|jd|ƒr$dSq$dS)NTrF)Úneed_more_tokensÚfetch_more_tokensrÚ isinstance)rÚchoicesÚchoicer r r Ú check_tokenqs zScanner.check_tokencCs*| ¡r| ¡q|jr"|jdSdSdS)Nr)r!r"rr r r r Ú peek_token}s   zScanner.peek_tokencCs6| ¡r| ¡q|jr2|jd7_|j d¡SdS)Nrr)r!r"rrÚpopr r r r Ú get_token‡s  zScanner.get_tokencCs2|jr dS|jsdS| ¡| ¡|jkr.dSdS)NFT)rrÚstale_possible_simple_keysÚnext_possible_simple_keyrr r r r r!‘szScanner.need_more_tokenscCsÒ| ¡| ¡| |j¡| ¡}|dkr4| ¡S|dkrL| ¡rL| ¡S|dkrd| ¡rd|  ¡S|dkr||  ¡r||  ¡S|dkrŒ|  ¡S|dkrœ|  ¡S|dkr¬| ¡S|dkr¼| ¡S|d krÌ| ¡S|dkrä| ¡rä| ¡S|d krü| ¡rü| ¡S|d kr| ¡r| ¡S|d kr*| ¡S|d kr<| ¡S|dkrN| ¡S|dkrh|jsh| ¡S|dkr‚|js‚| ¡S|dkr”| ¡S|dkr¦| ¡S| ¡r¸|  ¡St!ddd|| "¡ƒ‚dS)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`        þzScanner.fetch_more_tokenscCs6d}|jD]&}|j|}|dks*|j|kr |j}q |Sr )rr )rZmin_token_numberÚlevelÚkeyr r r r+s   z Scanner.next_possible_simple_keycCs\t|jƒD]L}|j|}|j|jks4|j|jdkr |jrNtd|jd| ¡ƒ‚|j|=q dS)Niúwhile scanning a simple keyúcould not find expected ':')Úlistrrrrrrr[)rr^r_r r r r*s  ÿÿz"Scanner.stale_possible_simple_keyscCs^|j o|j|jk}|jrZ| ¡|jt|jƒ}t|||j |j |j|  ¡ƒ}||j |j<dSr ) rrrrÚremove_possible_simple_keyrÚlenrr rrr[r)rrr r_r r r Úsave_possible_simple_key'sÿz Scanner.save_possible_simple_keycCs@|j|jkr<|j|j}|jr2td|jd| ¡ƒ‚|j|j=dS)Nr`ra)rrrrrr[)rr_r r r rc8s  ÿz"Scanner.remove_possible_simple_keycCs@|jr dS|j|kr<| ¡}|j ¡|_|j t||ƒ¡q dSr )rrr[rr(rÚappendZ BlockEndToken)rrrr r r r>Es   zScanner.unwind_indentcCs&|j|kr"|j |j¡||_dSdS)NTF)rrrf)rrr r r Ú add_indent]s  zScanner.add_indentcCs$| ¡}|j t|||jd¡dS)N)Úencoding)r[rrfZStreamStartTokenrh©rrr r r rgs ÿzScanner.fetch_stream_startcCsB| d¡| ¡d|_i|_| ¡}|j t||ƒ¡d|_dS)NrFT) r>rcrrr[rrfZStreamEndTokenrrir r r r@ss zScanner.fetch_stream_endcCs,| d¡| ¡d|_|j | ¡¡dS)NrF)r>rcrrrfÚscan_directiver r r r rB†s zScanner.fetch_directivecCs| t¡dSr )Úfetch_document_indicatorZDocumentStartTokenr r r r rD’szScanner.fetch_document_startcCs| t¡dSr )rkZDocumentEndTokenr r r r rF•szScanner.fetch_document_endcCsH| d¡| ¡d|_| ¡}| d¡| ¡}|j |||ƒ¡dS)NrFé)r>rcrr[Úforwardrrf©rÚ TokenClassÚ start_markÚend_markr r r rk˜s  z Scanner.fetch_document_indicatorcCs| t¡dSr )Úfetch_flow_collection_startZFlowSequenceStartTokenr r r r rG¨sz!Scanner.fetch_flow_sequence_startcCs| t¡dSr )rrZFlowMappingStartTokenr r r r rH«sz Scanner.fetch_flow_mapping_startcCsJ| ¡|jd7_d|_| ¡}| ¡| ¡}|j |||ƒ¡dS)NrT)rerrr[rmrrfrnr r r rr®sz#Scanner.fetch_flow_collection_startcCs| t¡dSr )Úfetch_flow_collection_endZFlowSequenceEndTokenr r r r rI¿szScanner.fetch_flow_sequence_endcCs| t¡dSr )rsZFlowMappingEndTokenr r r r rJÂszScanner.fetch_flow_mapping_endcCsJ| ¡|jd8_d|_| ¡}| ¡| ¡}|j |||ƒ¡dS)NrF)rcrrr[rmrrfrnr r r rsÅsz!Scanner.fetch_flow_collection_endcCs<d|_| ¡| ¡}| ¡| ¡}|j t||ƒ¡dS©NT)rrcr[rmrrfZFlowEntryToken)rrprqr r r rKÖs zScanner.fetch_flow_entrycCs‚|jsF|jstddd| ¡ƒ‚| |j¡rF| ¡}|j t||ƒ¡nd|_|  ¡| ¡}|  ¡| ¡}|j t ||ƒ¡dS)Nz%sequence entries are not allowed hereT) rrrr[rgrrrfZBlockSequenceStartTokenrcrmZBlockEntryToken©rrrprqr r r rMäsþ zScanner.fetch_block_entrycCs„|jsD|jstddd| ¡ƒ‚| |j¡rD| ¡}|j t||ƒ¡|j |_|  ¡| ¡}|  ¡| ¡}|j t ||ƒ¡dS)Nz!mapping keys are not allowed here) rrrr[rgrrrfÚBlockMappingStartTokenrcrmÚKeyTokenrur r r rOsþ  zScanner.fetch_keycCs|j|jkr||j|j}|j|j=|j |j|jt|j|jƒ¡|jst| |j ¡rt|j |j|jt |j|jƒ¡d|_ n\|jsš|j sšt ddd|  ¡ƒ‚|jsÆ| |j ¡rÆ|  ¡}|j t ||ƒ¡|j |_ | ¡|  ¡}| ¡|  ¡}|j t||ƒ¡dS)NFz#mapping values are not allowed here)rrrÚinsertr rrwrrgrrvrrr[rfrcrmZ ValueToken)rr_rrprqr r r rQ!s8    ÿ  ÿþ  zScanner.fetch_valuecCs$| ¡d|_|j | t¡¡dS©NF)rerrrfÚ scan_anchorZ AliasTokenr r r r rRYszScanner.fetch_aliascCs$| ¡d|_|j | t¡¡dSry)rerrrfrzZ AnchorTokenr r r r rSdszScanner.fetch_anchorcCs"| ¡d|_|j | ¡¡dSry)rerrrfÚscan_tagr r r r rToszScanner.fetch_tagcCs|jdddS)Nr9©Ústyle©Úfetch_block_scalarr r r r rUzszScanner.fetch_literalcCs|jdddS)Nr:r|r~r r r r rV}szScanner.fetch_foldedcCs$d|_| ¡|j | |¡¡dSrt)rrcrrfÚscan_block_scalar©rr}r r r r€szScanner.fetch_block_scalarcCs|jdddS)Nr;r|©Úfetch_flow_scalarr r r r rW‹szScanner.fetch_singlecCs|jdddS)Nr<r|r‚r r r r rXŽszScanner.fetch_doublecCs$| ¡d|_|j | |¡¡dSry)rerrrfÚscan_flow_scalarrr r r rƒ‘szScanner.fetch_flow_scalarcCs"| ¡d|_|j | ¡¡dSry)rerrrfÚ scan_plainr r r r rZœszScanner.fetch_plaincCs|jdkrdSdS)NrT)rr r r r rA«s zScanner.check_directivecCs.|jdkr*| d¡dkr*| d¡dkr*dSdS)Nrrlú---õ …

T©rÚprefixr?r r r r rC²s   ÿzScanner.check_document_startcCs.|jdkr*| d¡dkr*| d¡dkr*dSdS)Nrrlú...r‡Trˆr r r r rEºs   ÿzScanner.check_document_endcCs| d¡dkS)Nrr‡)r?r r r r rLÂszScanner.check_block_entrycCs|jr dS| d¡dkSdS©NTrr‡©rr?r r r r rNÇszScanner.check_keycCs|jr dS| d¡dkSdSr‹rŒr r r r rPÑszScanner.check_valuecCs6| ¡}|dkp4| d¡dko4|dkp4|j o4|dkS)Nu …

-?:,[]{}#&*!|>'"%@`rr‡r.z?:)r?rr\r r r rYÛs þzScanner.check_plaincCs~|jdkr| ¡dkr| ¡d}|sz| ¡dkr<| ¡q&| ¡dkr^| ¡dkr^| ¡qH| ¡rt|jsxd|_q"d}q"dS)NruFú ú#õ …

T)rr?rmÚscan_line_breakrr)rÚfoundr r r r=ðs     zScanner.scan_to_next_tokencCsŒ| ¡}| ¡| |¡}d}|dkr:| |¡}| ¡}n:|dkrV| |¡}| ¡}n| ¡}| ¡dkrt| ¡q^| |¡t||||ƒS)NÚYAMLZTAGr)r[rmÚscan_directive_nameÚscan_yaml_directive_valueÚscan_tag_directive_valuer?Úscan_directive_ignored_lineZDirectiveToken)rrpÚnameÚvaluerqr r r rjs        zScanner.scan_directivecCsÄd}| |¡}d|kr"dksXnd|kr8dksXnd|krNdksXn|dkrl|d 7}| |¡}q|s†td |d || ¡ƒ‚| |¡}| |¡| ¡}|d krÀtd |d || ¡ƒ‚|S) NrÚ0Ú9ÚAÚZÚaÚzú-_rúwhile scanning a directiveú6expected alphabetic or numeric character, but found %rõ …

)r?rr[r‰rm)rrpÚlengthr]r˜r r r r“&s2 Bÿ ÿþ  ÿþzScanner.scan_directive_namecCs†| ¡dkr| ¡q| |¡}| ¡dkrFtd|d| ¡| ¡ƒ‚| ¡| |¡}| ¡dkr~td|d| ¡| ¡ƒ‚||fS)Nrr/r z%expected a digit or '.', but found %rr¢z%expected a digit or ' ', but found %r)r?rmÚscan_yaml_directive_numberrr[)rrpÚmajorÚminorr r r r”;s      þ   þz!Scanner.scan_yaml_directive_valuecCs|| ¡}d|krdks4ntd|d|| ¡ƒ‚d}d| |¡krRdkr`nn |d7}q8t| |¡ƒ}| |¡|S)Nr™ršr zexpected a digit, but found %rrr)r?rr[Úintr‰rm)rrpr]r£r˜r r r r¤Lsÿ  z"Scanner.scan_yaml_directive_numbercCsH| ¡dkr| ¡q| |¡}| ¡dkr6| ¡q | |¡}||fS)Nr)r?rmÚscan_tag_directive_handleÚscan_tag_directive_prefix)rrpÚhandler‰r r r r•Ys      z Scanner.scan_tag_directive_valuecCs6| d|¡}| ¡}|dkr2td|d|| ¡ƒ‚|S)NÚ directiverr úexpected ' ', but found %r)Úscan_tag_handler?rr[©rrpr˜r]r r r r¨cs ÿz!Scanner.scan_tag_directive_handlecCs6| d|¡}| ¡}|dkr2td|d|| ¡ƒ‚|S)Nr«r¢r r¬)Ú scan_tag_urir?rr[r®r r r r©ls ÿz!Scanner.scan_tag_directive_prefixcCsj| ¡dkr| ¡q| ¡dkr8| ¡dkr8| ¡q"| ¡}|dkr^td|d|| ¡ƒ‚| ¡dS)NrrŽrr ú0expected a comment or a line break, but found %r©r?rmrr[r©rrpr]r r r r–us     ÿþz#Scanner.scan_directive_ignored_linec Cs| ¡}| ¡}|dkrd}nd}| ¡d}| |¡}d|krLdks‚nd|krbdks‚nd |krxd ks‚n|d kr–|d 7}| |¡}q8|s´td ||d|| ¡ƒ‚| |¡}| |¡| ¡}|dkròtd ||d|| ¡ƒ‚| ¡}||||ƒS)NrÚaliasÚanchorrr™ršr›rœrržrŸrzwhile scanning an %sr¡u …

?:,]}%@`)r[r?rmrr‰) rrorpZ indicatorr—r£r]r˜rqr r r rzƒs@  Bÿ  ÿþ   ÿþzScanner.scan_anchorc Cs"| ¡}| d¡}|dkrdd}| d¡| d|¡}| ¡dkrZtd|d| ¡| ¡ƒ‚| ¡nz|dkr~d}d }| ¡n`d}d }|d kr°|d krœd }q°|d7}| |¡}q†d }|rÆ| d|¡}n d }| ¡| d|¡}| ¡}|d krtd |d|| ¡ƒ‚||f}| ¡}t|||ƒS)Nrú<éÚtagr:zwhile parsing a tagzexpected '>', but found %rr‡r8Fr¢Tzwhile scanning a tagr¬)r[r?rmr¯rr­ZTagToken) rrpr]rªÚsuffixr£Z use_handler˜rqr r r r{§sN     þ     ÿzScanner.scan_tagcCs°|dkrd}nd}g}| ¡}| ¡| |¡\}}| |¡|jd}|dkrTd}|dkrv| ¡\}} } t|| ƒ} n||d} | | ¡\}} d} |j| krr|  ¡dkrr|  |¡|  ¡dk} d}|  |¡d krà|d7}qÈ|  |  |¡¡| |¡|  ¡} | | ¡\}} |j| krr|  ¡dkrr|r`| d kr`| r`|  ¡dkr`|sj|  d ¡n |  | ¡q”qrq”|dk r†|  | ¡|dkrš|  |¡td |¡d|| |ƒS) Nr:TFrÚr,ú rrÚ r)r[rmÚscan_block_scalar_indicatorsÚscan_block_scalar_ignored_linerÚscan_block_scalar_indentationÚmaxÚscan_block_scalar_breaksrr?Úextendrfr‰rÚ ScalarTokenÚjoin)rr}ÚfoldedÚchunksrpÚchompingÚ incrementZ min_indentÚbreaksÚ max_indentrqrÚ line_breakZleading_non_spacer£r r r r€ÐsX        ÿ ÿ      ÿzScanner.scan_block_scalarcCsød}d}| ¡}|dkrn|dkr&d}nd}| ¡| ¡}|dkrÊt|ƒ}|dkrdtd|d| ¡ƒ‚| ¡n\|dkrÊt|ƒ}|dkr˜td|d| ¡ƒ‚| ¡| ¡}|dkrÊ|dkr¾d}nd}| ¡| ¡}|d krðtd|d || ¡ƒ‚||fS) Nz+-ú+TFÚ 0123456789rúwhile scanning a block scalarz| | |¡¡| |¡| ¡}|sv|dkrv| d¡dkrv| d¡| d¡q|r‚|dksŽ|s¢|dkr¢| |¡| ¡q|r¬|dkr¬| ¡| ¡}||jkræ| |j|¡| ¡nÄ||jkrn|j|}| ¡t|ƒD]6}| |¡dkr td |d || |¡f| ¡ƒ‚q t | |¡d ƒ}| t |ƒ¡| |¡n<|d kr”|  ¡|  |  ||¡¡ntd |d || ¡ƒ‚q|SqdS)Nru'"\ …

rr;r¶z"\rÛÚ0123456789ABCDEFabcdefz%while scanning a double-quoted scalarz@expected escape sequence of %d hexadecimal numbers, but found %rérÏz!found unknown escape character %r)r?rfr‰rmÚESCAPE_REPLACEMENTSÚ ESCAPE_CODESÚrangerr[r§ÚchrrrÁÚscan_flow_scalar_breaks)rrÒrprÅr£r]ÚkÚcoder r r rСsT            ÿþ  ÿz#Scanner.scan_flow_scalar_non_spacesc Cs°g}d}| |¡dkr |d7}q| |¡}| |¡| ¡}|dkrXtd|d| ¡ƒ‚nT|dkr¢| ¡}| ||¡}|dkrˆ| |¡n|s–| d ¡| |¡n | |¡|S) Nrrºrr,úwhile scanning a quoted scalarzfound unexpected end of streamrÏr»r) r?r‰rmrr[rrõrfrÁ) rrÒrprÅr£Ú whitespacesr]rÊrÈr r r rÑÌs,   ÿ     zScanner.scan_flow_scalar_spacescCszg}| d¡}|dks|dkr>| d¡dkr>td|d| ¡ƒ‚| ¡dkrT| ¡q>| ¡dkrp| | ¡¡q|SqdS) Nrlr†rŠr‡røz#found unexpected document separatorrºrÏ)r‰r?rr[rmrfr)rrÒrprÅr‰r r r rõäs  ÿÿ   zScanner.scan_flow_scalar_breakscCsg}| ¡}|}|jd}g}d}| ¡dkr0qð| |¡}|dks„|dkrj| |d¡d|jrbdndks„|jrz|dkrzq„|d7}q0|dkrŽqðd |_| |¡| | |¡¡| |¡| ¡}|  ||¡}|rð| ¡dksð|js|j |krqðqt d  |¡d ||ƒS) NrrrŽr‡r6z,[]{}r¹z,?[]{}FT) r[rr?rrrÁrfr‰rmÚscan_plain_spacesrrÂrÃ)rrÅrprqrÚspacesr£r]r r r r…ösJ   ÿ ÿþüü    ÿÿzScanner.scan_plainc Cs&g}d}| |¡dkr |d7}q| |¡}| |¡| ¡}|dkr| ¡}d|_| d¡}|dksn|dkr€| d¡d kr€dSg} | ¡d krâ| ¡dkr¦| ¡q„|  | ¡¡| d¡}|dksÎ|dkr„| d¡d kr„dSq„|d krö| |¡n| s| d¡| | ¡n|r"| |¡|S) NrrrrÏTrlr†rŠr‡rÎr»)r?r‰rmrrrfrÁ) rrrprÅr£rùr]rÊr‰rÈr r r rúsB      ÿ     ÿ    zScanner.scan_plain_spacescCsê| ¡}|dkr*td||d|| ¡ƒ‚d}| |¡}|dkrÒd|krTdksŠnd|krjd ksŠnd |kr€d ksŠn|d krž|d7}| |¡}q@|dkrÊ| |¡td||d|| ¡ƒ‚|d7}| |¡}| |¡|S) Nr8úwhile scanning a %szexpected '!', but found %rrrr™ršr›rœrržrŸ)r?rr[rmr‰)rr—rpr]r£r˜r r r r­Ds0 ÿ Bÿ   ÿ  zScanner.scan_tag_handlecCsôg}d}| |¡}d|kr&dks\nd|krrgrr@rBrDrFrkrGrHrrrIrJrsrKrMrOrQrRrSrTrUrVrrWrXrƒrZrArCrErLrNrPrYr=rjr“r”r¤r•r¨r©r–rzr{r€r¼r½r¾rÀr„rñròrÐrÑrõr…rúr­r¯rýrr r r r r.s¼A    l    !8       #    $)L( îý+)%N)Ú__all__Úerrorrrrr rr r r r Ús