U :eS2@sddlmZddlZddlmZeejejdZeejdZ dde dDZ dde dDZ Gd d d Z ed krdd lmZed dddS)) iskeywordN)pyparse_cCsg|]}t|tkqS)chr_ASCII_ID_CHARS.0xrr8/usr/local/python38/lib/python3.8/idlelib/hyperparser.py sr cCsg|]}t|tkqSr)r_ASCII_ID_FIRST_CHARSrrrr r sc@s\eZdZddZddZddZddZdd d Zed ddhZ e ddZ dZ ddZ dS) HyperParserc sH|_|j_}t|j|j}dd}|||}|js|jD]`}t ||d}t |d} d|} | | | | d| || } | dk s|dkrDqqD|| pdnF|d|} | r| d} nd } d|} | | | | d|d|jdd _| _|_fd d ttjD_|dS) NcSs tt|S)N)intfloat)indexrrr index2line"sz(HyperParser.__init__..index2linez.0z%d.endz rZconsolez1.0cs4g|],}|dko.j|dj|ddkqS)rr) bracketing)r iselfrr r Ksz(HyperParser.__init__..)editwintextrZParserZ indentwidthZtabwidthrZprompt_last_lineZnum_context_linesmaxreprZset_codegetZfind_good_parse_startZ_build_char_in_string_funcZset_loZ tag_prevrangecoderawtext stopatindexZget_last_stmt_bracketingrrangelenisopener set_index) rrrrparserrlnocontextZstartatZ startatindexr!Zbodrrrr __init__s>         zHyperParser.__init__cCst|jt|j||j}|dkr2td|||_d|_|jt|jdkr||j|jdd|jkr||jd7_q>|jt|jdkr|j|jdd|jkr|j |jds|jd7_dS)Nrz(Index %s precedes the analyzed statementr) r#r rrr! ValueErrorindexinrawtext indexbracketrr$)rrr,rrr r%Qs&zHyperParser.set_indexcCs&|j|jo$|j|j|jddkS)Nr)"'r$r-r rrrrr is_in_stringfs  zHyperParser.is_in_stringcCs(|j|j p&|j|j|jddkS)Nr)#r.r/r0rrrr is_in_codens zHyperParser.is_in_code([{FcCsB|j|jd}|j}|j|rJ|j|j|d|ksJ|j|d|krt|d8}|dkr^dSt||j|d}q|jd}|t|jkr|j|d|kr|d7}q~|jd|jt|j|j|df}|t|jks|j|dt|jkr |rdS|j}n.|jd|jt|j|j|ddf}||fS)Nrrz%s-%dc) rr-r$r minr#rrr!)rZopenersZ mustcloseZbracketinglevelbeforeZafterZ beforeindexZ afterindexrrr get_surrounding_bracketsts>    z$HyperParser.get_surrounding_bracketsTrueFalseNonecCsVt}|}||krBt||ddkrB|t||drB|d8}q||krt||ddkr|d|krd||d|r|d8}q^|d|krd||d|r|d8}|d|krd||d|r|d8}|||sdSn ||krtt||sdS||krNt|||rN||||jkrNdS||S)Nrr ar)_IS_ASCII_ID_CHARord isidentifier_IS_ASCII_ID_FIRST_CHARr _ID_KEYWORDS)clsstrlimitposZis_ascii_id_charrrrr _eat_identifiers6 $ $$  zHyperParser._eat_identifierz \c Cs|std|j}|j}|j}||d}|j}|}d}||kr`||d|jkr`|d8}q<|s||kr||ddkr|d8}d}q<||kr|dkr|||dddkr|d8}||d}||dd}q||d kr|dkr||dd kr|d8}q|}qq<qq<|||jS) Nz?get_expression should only be called if index is inside a code.rTr.r2r=Fz([z'"ZrRbBuU)r3r+r rr-r,_whitespace_charsrG) rr rZ brck_indexZ brck_limitrFZlast_identifier_posZ postdot_phaseretlevelrrr get_expressionsf          zHyperParser.get_expressionN)r4F)__name__ __module__ __qualname__r*r%r1r3r7 frozensetrB classmethodrGrIrLrrrr rs7 , 9r__main__)mainz"idlelib.idle_test.test_hyperparserr=) verbosity)keywordrstringZidlelibrrP ascii_lettersdigitsrrr"r>rArrMZunittestrSrrrr s