bgϓPddlmZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddl m Z ddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&dd lm'Z'dd!lm(Z(dd"lm)Z)dd#lm*Z*dd$lm+Z+dd%lm,Z,dd&lm-Z-dd'lm.Z.dd(lm/Z/dd)lm0Z0dd*l1m2Z2dd+l3m4Z4dd,l5m6Z6d-Z7d.Z8d/Z9d0Z:d1Z;Gd2d3Z>** %'c|jjSr:)r;stater=s r>_statez Parser._stateEs yr@c|jjSr:)r;idxrCs r>_idxz Parser._idxIs y}r@c|jjSr:)r;currentrCs r>_currentzParser._currentMs y  r@c|jjSr:)r;markerrCs r>_markerzParser._markerQs yr@c4|jS)z= Extracts the value between marker and index )r;extractrCs r>rOzParser.extractUsy  """r@N exceptiontype[ParseError] | Noneboolc8|j|S)z Increments the parser if the end of the input has not been reached. Returns whether or not it was able to advance. rP)r;inc)r=rPs r>rUz Parser.inc[s y}}y}111r@nintc:|j||S)zm Increments the parser by n characters if the end of the input has not been reached. )rVrP)r;inc_n)r=rVrPs r>rYz Parser.inc_nbs yi888r@rc<|j|||S)zD Consume chars until min/max is satisfied is valid. )charsminmax)r;consume)r=r\r]r^s r>r_zParser.consumeis!y  u#3 ???r@c4|jS)zN Returns True if the parser has reached the end of the input. )r;endrCs r>raz Parser.endosy}}r@c8|jdS)zA Sets the marker to the index's current position N)r;markrCs r>rcz Parser.markus r@c.|jj|g|Ri|S)zJ Creates a generic "parse error" at the current position. )r; parse_error)r=rPargskwargss r>rezParser.parse_error{s)%ty$Y@@@@@@@r@r-ctd}|s|jdkrn|}|sn|\}}||s|||sS |||n;#t$r.}|tt||d}~wwxYw| ||s| \}}t|tr*|r|||} |||n;#t$r.}|tt||d}~wwxYw||d|S)NT[F)r-rarJ _parse_itemis_multi _merge_wsappend Exceptionrerr6rc _parse_table isinstancer'is_aot_element _parse_aotparsing)r=bodyitemkeyvaluees r>parsez Parser.parsesD!!((** }####%%D JCCLLNN4>>%QU;V;VFKKU++++ FFF**:s1vv>>AEF IIKKK%((** (((** B**,,JC%'' 4E,@,@,B,B 4s33 B C'''' B B B&&z3q66::A B((** B U s09B C)CCE55 F-?)F((F-rur containerrch|}|sdSt|trt|tsdS|jt |jt |jzz }|jddt|j||jf|jd<dS)z Merges the given Item with the last one currently in the given Container if both are whitespace items. Returns True if the items were merged. FrZrT) last_itemrpr*rGlensrtr;)r=rurzlaststarts r>rlzParser._merge_wss""$$ 5$ ++ :dJ3O3O 5 S[[3tv;;67 N2 q ! ty!23 4 4 r tr@parentr!childct|}t|}||krdS||dt|kS)z Returns whether a key is strictly a child of another key. AoT siblings are not considered children of one another. FN)tupler})r=rr parent_parts child_partss r> _is_childzParser._is_childsH V}} Ell ; & &5{+>S->->+>???r@tuple[Key | None, Item] | Nonec ||j5} |j}|dkrC|dt |fcdddS|dvrD|s/dt |fcdddSn{|dkrY|}|\}}}dtt||||fcdddS|dkr ddddSd|_ n dddn #1swxYwY| dS)zw Attempts to parse the next item and returns it, along with its key if the item is value-like. T N #ri) rcrDrJrUr*rO_parse_comment_trailrr)restore_parse_key_value)r=rBcindentcwscommenttrails r>rjzParser._parse_items [ E M99HHJJJDLLNN!;!;;        '\\88::@#Z %?%??        @#XX!\\^^F*.*C*C*E*E'C%We)L)L!M!MM#        $#XX)        2%)EM3 25               8$$T***s+AE.:E5AEE) EEET parse_trailtuple[str, str, str]c*|rdSd}d}| |j}|dkrnw|dkr%|}|||s|jst |j}|tks|tkr'|tkr| t|d|sn-|s|j|}|nK|dvr|n| t||rnd}|r|j rB|r. |j r|.|jdkr||jdkr||j|jks|jr|}|||fS) z Returns (comment_ws, comment, trail) If there is no comment, comment_ws and comment will simply be empty. )rrrTrrcommentsr )rarcrJrOrUis_nlordCHR_DELCTRL_CHAR_LIMITCTRL_Irer r is_spacesrGrMis_ws)r=rr comment_wsrcoders r>rzParser._parse_comment_trailsS 88:: :    ADyyc!\\^^   ((**T]-@-@-B-Bt}--Dw$/*A*Adfnn"../A4TTT88:: ((**T]-@-@-B-B,,.. g &&':A>>>xxzz = @  '-))++   -))++   }$$ }$$ yDL((DM,?,?,A,A( 7E))r@F parse_commenttuple[Key, Item]c||jrB|r. |jr|.|}|}||jdk}|jrk|rW|jdkr|r|tdd}|jr|W|s |t|j|j s||_ n"|xj |z c_ | }|r<| \}}}|j } | j s|| _ || _|| _n d|j _||j _||fS)N=Tr)rcrJrrUrO _parse_key is_kv_seprersep _parse_valuertriviarrrr) r=rrrv found_equalsvalrrrmetas r>rzParser._parse_key_value-s m%%'' DHHJJ  m%%'' DHHJJ oo }+ m%%'' (DHHJJ (}##(**+>DDD#'L m%%'' (DHHJJ (  G""#6 FF Fw &llnnCGG GGt||~~ %GG!!  ""&";";"="= C%:D? &"%"DLDJJ!CJ " Cxr@cB||jrB|r. |jr|.|jdvr|S|S)zz Parses a Key at the current position; WS before the key must be exhausted first at the callsite. z"')rcrJrrU_parse_quoted_key_parse_bare_keyrCs r>rzParser._parse_key\s m%%'' DHHJJ  m%%'' DHHJJ  =E ! !))++ +'')) )r@c|}|jtfdtDd}|t d||tjkr tjn tj }|j r%| t|j j||z }||jrB|r. |jr|.||z }t't)||d|}|jdkr;|||}|S)zJ Parses a key enclosed in either single or double quotes. c32K|]}|jk |VdSr:)rw).0t quote_styles r> z+Parser._parse_quoted_key..qs/FFqqw+/E/E/E/E/E/EFFr@Nz+Should not have entered _parse_quoted_key()r)rroriginal.)rOrJnextr" RuntimeError _parse_stringBasicr&SLBSLL_t is_multilinererrw as_stringrcrrUr$r6concatr)r=rkey_typekey_strrvrs @r>rzParser._parse_quoted_keyjs <<>>m FFFFGFFFMM  LMM M$$&'-77JNNZ^   : " " $ $ J""#6 8HII IG%%''' m%%'' DHHJJ  m%%'' DHHJJ DLLNN"G b8LLL =C   HHJJJ**T__..//C r@c|js|jr[|rG |js|jr|G|}|}|s|td|vr|td|dt|tj d|}|jdkr;|| | }|S)z$ Parses a bare key.  z Invalid key ""rr)rJis_bare_key_charrrUrOstriprer rr$r"Barerr)r=rrvs r>rzParser._parse_bare_keys7 M * * , , 04 0G0G0I0I hhjj   M * * , , 04 0G0G0I0I hhjj  <<>>nn 2""=11 1 #::"":/Es/E/E/EFF FW\2x88 =C   HHJJJ**T__..//C r@c  ||j}t}|tjjkr|S|tjjkr|S|tj jdkr| S|tj jdkr| S|dkr|S|dkr|S|dvs|ddvr|jdvr2|r |jdvr||}|||}||S|t*|t,jvr|jdvr2|r |jdvr||}t1j|}|r|d r|d r t7|}t9|t:jsJt=|j|j |j!|j"|j#|j$|j%|j&|| S#tN$r|tPwxYw|d r~ t7|}t9|t:j)sJtU|j|j |j!||}||jd vr2|r |jd vr||}|+} |tY| d|_-| s|St7|| z}t9|t:jsJt=|j|j |j!|j"|j#|j$|j%|j&||| z S#tN$r|t\wxYw|d r t7|} t9| t:j/sJta| j"| j#| j$| j%| j&||S#tN$r|tbwxYw|||}||S|t*|td|) zD Attempts to parse a value at the current position. rri{z+->+inf+nan-inf-naninfnan #,]}Nz #,]})3rcrJr)r&rrw_parse_basic_stringr_parse_literal_stringrTRUE _parse_trueFALSE _parse_false _parse_array_parse_inline_table_peekrUrO _parse_numberrerr5digitsrmatchgrouprrpdatetimeryearmonthdayhourminutesecond microsecondtzinfo ValueErrorrdaterrstripr}rrtimer(rr) r=rrrawrumdtrtime_raw time_partrs r>rzParser._parse_values@ M $ $ $++-- - *.& & &--// / (-%a( ( (##%% % (.&q) ) )$$&& & #XX$$&& & #XX++-- - $YY$**Q--,   -}444-}444,,..C%%c622D ""#566 6 &-  -}444-}444,,..C$S))AC A771::E!''!**EE*3//)"h.?@@@@@'GHFGIINI"   &EEE"../CDDDE771::AA*3//)"hm<<<<<#BGRXrvvsKK "m<??DHHJJ? #m<??DHHJJ?$(<<>>$,OO$5$5 ,4S^^5E5E,F)((#'K*3?;;)"h.?@@@@@'GHFGIINI")O   &AAA"../?@@@A771::A A)#..)!X];;;;;#FHHMH"  &AAA"../?@@@A%%c622D ""#566 6""#6:: :s. A*J77%K6C#Q A0Q %Q0 AS""%Tc@|tjSr:) _parse_boolrrrCs r>rzParser._parse_trues ...r@c@|tjSr:)rrrrCs r>rzParser._parse_false!s///r@stylerrc|j5t|}|D]}||ddt|t cdddS#1swxYwYdS)Nr)r]r^)rDrr_rr))r=rrs r>rzParser._parse_bool$s [ ) )UOOE . . QA1 ----vxx(( ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )sAAA!$A!rc `|tg}d} |j}|tjtjz|j||j}ttjt|z}|r#| t||j dkrM| d\}}}| tt|||||r$| t||s< | |d}B#t $rYnwxYw|rL|j dkrA|t| tdd}|j dkr|n |t |j  t%|t} | S#t&$rYdSwxYw)NrTTrF)r,])rUrrGr_r,SPACESNLr;setrmr*rJrrr)rrrerr) r=elems prev_valuercrnewlinerrrress r>rzParser._parse_array/s4 -... + G9D LL8;6 7 7 7Ytdi/0F(+&&V4G  Z//000}##&*&?&?E&?&R&R#We WVFC%%H%HIIJJJ  Z//000 LL!2!2!4!4555!%J*D dms22#5666 Z__---" }## ""#6 FF F vxx((CJ    DD s$7)E"" E/.E/H H-,H-rc|ttd}d} |j}|t j|j||j}|r"|t||sS|j dkr|n|dus |+|j dkr | t|j n6|j dks |j dkr | t|j | d\}}||||j}|t j|j||j}|r"|t||j dk}|r|tt|tS)NrTT}Fr)rUrrrGr_r,rr;addr*rJrerrrr))r=rtrailing_commarcrrvrs r>rzParser._parse_inline_tableis -...$+ 79D LL ) ) ))D49,-C + *S//***! O=C''HHJJJ#e++%- ,,**+> NNN=C''4=C+?+?**+> NNN,,U33HC IIc3   9D LL ) ) ))D49,-C + *S//***"]c1N 7#5666W+ 7Z5&((+++r@rrr) Item | Nonecd}|dr|d}|dd}t|dkrC|dr|dr|r|drdS|dr|rdSd }d }|d rd }d }n3|drd}d}n|drd}d}tjd|d|dd|}d|vrdS|dsD|ds1|ddddrdS tt||z||||zS#t$r: tt||z|||zcYS#t$rYYdSwxYwwxYw)Nr)+-rr0)z0.0o0x0b0er)rrrz[0-9]r/rz[01]rz[0-7]rz[0-9a-f]z(?i)(?<=z)_(?=)_rx) startswithr}resublowerendswithsplitrrWrrfloat)r=rrsignrbasecleans r>rzParser._parse_numbersO >>* % % q6Dabb'C s88a<< NN3   NN#ABB  s##  4 >>, - - $ 4 >>$   FDD ^^D ! ! FDD ^^D ! ! FD8&88v888"cBBHHJJ %<<4 NN3   ##D))  C##A&//44  4 3te|T22FD3JGG G    U4%<00&$*EEEEE   ttt  s0;$F G$+#GG$ G G$G  G$r%c|j5|tjcdddS#1swxYwYdSr:)rDrr&rrCs r>rzParser._parse_literal_string [ 6 6%%jn55 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 488c|j5|tjcdddS#1swxYwYdSr:)rDrr&rrCs r>rzParser._parse_basic_stringr$r%c|r|jrgd}|jr&||jz }|t?d|vr |t |jdS|jt vr/t |j}|t|S|jdvrd||jdk\}}|'|t|dz|S|t|t |j)NrrTrUur)r) rJrrUrrer r _peek_unicoderYr}r)r= multilinetmprr*ues r>_parse_escaped_charzParser._parse_escaped_chars?  ,,.. C-%%'' t}$#56663&&'?OOO2 =H $ $'A HH1H 2 2 2H =J & &&&t}';<rzParser._parse_stringsk =EJ & &""#J???F 7t}%%D##%%D 7D 7W__(?(?DFNN""$$ES ES GOO..VVV$<<<&&'94KKK6 7%*!>%%''E-5:55. -5:555zzA~~ 5zzQ%eUHfhhGGG5zzQ"../GWWWU3B3Z'Ecrc *H!%&((CCCHHJJJeUHfhh???!! 7g 711%2D2D2F2FGGG !! 7dmt&;&;#56666&#5666MF 7s9E$$E(+E( parent_name Key | None Table | Nonetuple[Key, Table | AoT]c |jdkr|td|}||r|t d}|jdkr0|s|t d} |}n)#t$r|tdwxYw|r|t |jdkr |t|jd|_ |}t|}td|Dr1|td |d d}|rt|} nd } t!|t!| d zkrd}|t!| d}t#d} ||r||\} } } t'}t)| t+|| | | ||r |d jn|j|d}t!|d krz|rKt)t#dt+d| | | |o|d |jvd|d j}|}|d }t1|d dD] \}}||t)t#dt+|| | | |o|t!|dz k|t!|dz k|j|t!|dz kr|nd}|rC|t!|dz kr-||t7|g|jdn||||}|j}  n |r|d }|sf|}|r3|\}}||| s|||n|jdkr| \}}|!||r|"||\}}||||sq| \}}|!||snC|"||\}}||||qn0|td|ftG|t&r2|}|r.|jr||jdkr|$||}||fS)z) Parses a table element. riz/_parse_table() called on non-bracket character.FTNrrc3tK|]3}d|jvo|V4dS)rN)rvris_bare)rparts r>rz&Parser._parse_table..s@QQdsdhnn&&&94<<>>QQQQQQr@zInvalid table name "rrr)name display_nameis_super_table)rLrJr)rLrJrK)rJparsedz7_parse_item() returned None on a non-bracket character.rZ)%rJrer rOrUrarrr r rrranyrrr}rrr#r'r)rvr< enumerateget raw_appendrrJrwrjrl _peek_tablerrorprr)r=rArris_aotrvfull_key name_parts missing_tableparent_name_partsvaluesrrrresulttablei_namerru_keyrkey_next table_nexts r>rozParser._parse_tablewsS =C  ""#%V   88:: 7""#566 6 =C  88:: ;&&'9:::F B//##CC B B B""#677T A B 88:: G""#566 6 ]c ! !""#6 FF F3ZZ QQjQQQ Q Q ""J83E3E3G3GJJJ   # %k 2 2   "  z??S!233a7 7 7 M$5 6 6 8 89 4    HHJJJ"7799We  63 / / &0=A""cg!++--     z??Q    dOO2sGU33?z!}?#'#A* FQ-C%jn55 % %5 !$vsGU;;;1J!(;#;'(3z??Q+>'>"YJ! 333&.%7%7%9%9%9!     3a3z??Q#666$$UCejQU,V,V,VWWWW$$UE222+ %. $ m((** ##%%D ! d~~dF331$$T4000=C''"&"2"2"4"4KAx~~h99C/3/@/@5/Q/Q,*((:>>>#'((**C*.*:*:*<*>(H#E#E& %373D3DXu3U3U0Hj!,,XzBBB#'((**C**+Q9((** B fd # # ;F ;t ;(dob>Q2Q2Q::F{s ;C&C6tuple[bool, Key]c|dd5|jdkr|td|d}|jdkr|d} ||fcdddS#t $r|tdwxYw#1swxYwYdS)z Peeks ahead non-intrusively by cloning then restoring the initial state of the parser. Returns the name of the table about to be parsed, as well as whether it is part of an AoT. T save_markerrriz._peek_table() entered on non-bracket characterFN)rDrJrer rUrr r )r=rSs r>rRzParser._peek_tables@[[T4[ 8 8 F F}##&&'D HHJJJF}##  Ft000 F F F F F F F F! F F F&&':;;E F F F F F F F F F F Fs$AC7B&B??CC Cfirstr' name_firstrc||g}|j||sb|\}}|r4||kr.||\}}||nn|b|jt |dS)zg Parses all siblings of the provided table first and bundles them into an AoT. T)rM)r<rmrarRropopr)r=rdrepayload is_aot_next name_nextrrZs r>rrzParser._parse_aot-s ' z***((** %)%5%5%7%7 "K yJ66,,Z885u%%%% ((**  74((((r@c|d5d}t|D]7}|jd|jjzvr||jz }|7|cdddS#1swxYwYdS)zk Peeks ahead n characters. n is the max number of characters that will be peeked. Tr2rrN)rDrangerJr;EOFrU)r=rVbufrs r>rz Parser._peek@s[[[ & &  C1XX  =  (EEE4=(CHHJJJ                  sA A//A36A3is_longtuple[str | None, str | None]cn|dd5|jdvr|td|||rd}nd}||sd\}}n|}|dd kr)|d  d r d d d dS tt|d }n#ttf$rd }YnwxYw||fcd d d S#1swxYwYd S)z Peeks ahead non-intrusively by cloning then restoring the initial state of the parser. Returns the unicode value is it's a valid one else None. Trbr(z,_peek_unicode() entered on non-unicode valuerrNNrdr01234567Nr)rDrJrer rUrcrYrOrrchrrWr OverflowError)r=ror\rw extracteds r>r+zParser._peek_unicodeRs[[T4[ 8 8 $ $}J..&&')W HHJJJ IIKKK ::e$$ !#- yy LLNN Q<%%''3..9Q<3E3Ej3Q3Q.%) $ $ $ $ $ $ $ $,!Ir 2 233EE"M2!!! EEE!)#7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s6B=D*#DD*DD*DD**D.1D.)r5r6r7r8)r7r6r:)rPrQr7rR)rVrWrPrQr7rR)rrZ)r7rR)r7r8)r7r-)rur rzrr7rR)rr!rr!r7rR)r7r)T)rrRr7r)F)rrRr7r)r7r!)r7r )rrr7r)r7r)r7r)rr6rr)r7r )r7r%)r0r&r7r%rr)rArBrrCr7rD)r7r`)rdr'rer!r7r)rVrWr7r6)rorRr7rp)+__name__ __module__ __qualname____doc__r?propertyrDrGrJrMrOrUrYr_rarcrreryrlrrjrrrrrrrrrrrrrrr/rrorRrrrr+rIr@r>r4r4:s_(((( XX!!X!  X #### 2222299999@@@@   %/AAAA &&&&P, @ @ @ @"+"+"+"+H;*;*;*;*;*z-----^ * * * *:6z;z;z;z;x///000 ) ) ) )8888t3,3,3,3,j1111f66666666+H+H+HZo7o7o7o7dFJYYYYYvFFFF6))))&$#$#$#$#$#$#$r@r4)= __future__rrrr5tomlkit._compatrtomlkit._utilsrrrtomlkit.containerrtomlkit.exceptionsr r r r r rrrrrrrr tomlkit.itemsrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*tomlkit.sourcer+tomlkit.toml_charr,tomlkit.toml_documentr-rr;r<rrr4rIr@r>rs}"""""" """"""))))))######(((((('''''',,,,,,222222222222777777111111//////333333111111//////777777))))))222222111111""""""!!!!!!""""""%%%%%%!!!!!!!!!!!!###### $$$$$$ $$$$$$!!!!!!&&&&&&......    {${${${${${${${${${$r@