U :eM@sddlZed\ZZZZZedejej Bj Z edejj Z edejejBj Zedejj Zedejj Zedejj ZGd d d eZeed d Zed ddDedddDedddDGdddZedkrddlmZeddddS)Nz ^ [ \t]* (?: while | else | def | return | assert | break | class | continue | elif | try | except | raise | import | yield ) \b z' [ \t]* (?: \# \S .* )? \n aK \""" [^"\\]* (?: (?: \\. | "(?!"") ) [^"\\]* )* (?: \""" )? | " [^"\\\n]* (?: \\. [^"\\\n]* )* "? | ''' [^'\\]* (?: (?: \\. | '(?!'') ) [^'\\]* )* (?: ''' )? | ' [^'\\\n]* (?: \\. [^'\\\n]* )* '? zM [ \t]* [^\s#\\] # if we match, m.end()-1 is the interesting char z_ \s* (?: return | break | continue | raise | pass ) \b z [^[\](){}#'"\\]+ c@seZdZddZdS)ParseMapcCsdS)Nx)selfkeyrr4/usr/local/python38/lib/python3.8/idlelib/pyparse.py __missing__rszParseMap.__missing__N)__name__ __module__ __qualname__r rrrrrfs rrccs|]}t|tdfVqdS)(Nord.0crrr xsrz({[ccs|]}t|tdfVqdS))Nrrrrrrysz)}]ccs|]}t|t|fVqdSNrrrrrrzsz"'\ #c@s|eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdS)ParsercCs||_||_dSr) indentwidthtabwidth)rrrrrr__init__szParser.__init__cCs||_d|_dSNr)code study_level)rsrrrset_codeszParser.set_codec Cs|jd}}t|}tdD]\}|dd|}|dkr:qz|dd|d}t|||}|rt||st|}qz|}q|dkrt|}|r||s|}|S|d}t||}|r|\}}||s|}qqq|S)Nrz: r )rlenrangerfind_synchrestartspan) rZis_char_in_stringrposlimitZtriesimrrrrfind_good_parse_starts2      zParser.find_good_parse_startcCs|dkr|j|d|_dSr)r)rlorrrset_losz Parser.set_loc Cs|jdkrdSd|_|j}|t}|dd}|dd}|dd}|dd}|dd}t}d}}dg|_}|j}dt|}}||krd||} |d}| dkrq| dkr|d}|dkr||q| d kr|d}q| d kr|r|d}q| d ks| d kr| } ||d|d | dkr8| d} |} t| d} || }||kr||} |d}| dkrxqP||d|| | kr|| }q| dkr|d}| dkrP|dkr||qqP| dkrP||dkr|d}|d}qPqP|d| krt }qt }q| dkr2| d|}q||dkrZ|d}|d|krZt }|d}q|t kr|t kr|dkrt }||_|d|kr||dS)Nr!ZxxxxxxxxxZxxxxZxxz xr rrr"'\#)rr translatetransreplaceC_NONE goodlinesappendr"C_STRING_FIRST_LINEC_STRING_NEXT_LINESfind C_BACKSLASH C_BRACKET continuation) rrrBlevellnor;Z push_goodr*nchquoteZfirstlnowrrr_study1s                    zParser._study1cCs||jSr)rIrBrrrrget_continuation_typeOszParser.get_continuation_typecCs|jdkrdS|d|_|j|j}}t|d}t|}|r|}t||d||D]}|dd|dd}q\t||r|d}q>qq>|dkr|}|||_|_ d}g}|j } |dfg} ||krht |||} | r4| } | d}||kr||dkr|d}q||kr"||}| }||kr4qh||} | dkrn| || |t|f| }|d}q| dkr|r|d =| }|d}| |t|fq| d ks| d kr| |t|df| }t ||| }| |t|fq| d kr<| |t|df|d||d}| |t|fq|d}||dkr^| ||}|d}q||_|r||d nd|_t| |_dS) Nr2r!r r ([{)]}r6r0r1r5)rrIrr;r"r#r$_junkre stmt_startstmt_endr<_chew_ordinaryreend_match_stringrer?lastchlastopenbracketpostuplestmt_bracketing)rrr;r*pqZnothingrVstackZ push_stackZ bracketingr+ZnewprFrrr_study2Ss               zParser._study2cCs||j}|j}t|}|dd|d}}|d}||krzt||}|rd|d}d}qq:|d|d}}q:|}}||dkr|d}q|j}t||| |j |S)Nr rr! ) r]rWrr"r$_itemrerTr?r expandtabsr)rjrrEZorigir*r+extrarrrcompute_bracket_indents$    zParser.compute_bracket_indentcCs||j}|d|dS)Nr6)rIr;)rr;rrrget_num_lines_in_stmtszParser.get_num_lines_in_stmtcCs|||j}|j}||dkr*|d}q|}|d|d}d}}||kr||}|dkrr|d}|d}qF|dkr|r|d}|d}qF|dks|dkrt|||}qF|d krqqF|dkr |d kr |dks||dd kr ||dd kr d}qqF|d}qF|r:|d}td |||dk}|s^|}||d kr^|d}qDt||j| |j dS)Nr^r!r rrNrOr0r1r5=z=<>!z\s*\\rM) r]rrQr?rUrTrematchr"r`r)rrr*startposendposfoundrCrFrrrcompute_backslash_indentsV       zParser.compute_backslash_indentcCsJ||j|j}}|}|j}||kr>||dkr>|d}q |||S)Nr^r!)r]rQrRr)rr*rErarrrrget_base_indent_string0s zParser.get_base_indent_stringcCs||jdkS)N:)r]rVrJrrris_block_opener<szParser.is_block_openercCs|t|j|jdk Sr)r]_closererrQrJrrris_block_closerAszParser.is_block_closercCs||jSr)r]rYrJrrrget_last_stmt_bracketingFszParser.get_last_stmt_bracketingN)r r r rrr,r.rIrKr]rcrerlrmrorqrrrrrrr}s8 { 9 r__main__)mainzidlelib.idle_test.test_pyparser2) verbosity)rgr#r:r@r=r>rAcompileVERBOSE MULTILINEsearchr%rhrPDOTALLrUr_rprSdictrfromkeysr8updaterr Zunittestrtrrrr sD    U