a  zeS2@sddlmZddlZddlmZeejejdZeejdZ dde dDZ dde dDZ Gd d d Z ed krdd lmZed dddS)) iskeywordN)pyparse_cCsg|]}t|tvqS)chr_ASCII_ID_CHARS.0xrrG/opt/bitninja-python-dojo/embedded/lib/python3.9/idlelib/hyperparser.py r cCsg|]}t|tvqSr)r_ASCII_ID_FIRST_CHARSrrrr r r c@sZeZdZddZddZddZddZdd d Zehd Z e ddZ dZ ddZ dS) HyperParserc sH|_|j_}t|j|j}dd}|||}|js|jD]`}t ||d}t |d} d|} | | | | d| || } | dus|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|jddvS)Nr)"'r%r.r!rrrrr is_in_stringfs  zHyperParser.is_in_stringcCs(|j|j p&|j|j|jddvS)Nr)#r/r0r1rrrr is_in_codens zHyperParser.is_in_code([{FcCsB|j|jd}|j}|j|rJ|j|j|d|vsJ|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_brackets>TrueNoneFalsecCsVt}|}||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||||jvrNdS||S)Nrrar)_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|jvr`|d8}q<|s||kr||ddkr|d8}d}q<||kr|dkr|||dddkr|d8}||d}||dd}q||d vr|dkr||dd vr|d8}q|}qq<qq<|||jS) Nz?get_expression should only be called if index is inside a code.rTr.r3r>Fz([z'"ZrRbBuU)r4r,r!rr.r-_whitespace_charsrH) rr!rZ brck_indexZ brck_limitrGZlast_identifier_posZ postdot_phaseretlevelrrr get_expressionsf          zHyperParser.get_expressionN)r5F)__name__ __module__ __qualname__r+r&r2r4r8 frozensetrC classmethodrHrJrMrrrr rs7 ,  9r__main__)mainz"idlelib.idle_test.test_hyperparserr>) verbosity)keywordrstringZidlelibrrQ ascii_lettersdigitsrrr#r?rBrrNZunittestrTrrrr s