B q1mv@sddlmZddlZddlmZeejejdZeejdZ dde dDZ dde dDZ Gd d d Z ed krdd lmZed dddS)) iskeywordN)pyparse_cCsg|]}t|tkqS)chr_ASCII_ID_CHARS).0xrr6/opt/alt/python37/lib/python3.7/idlelib/hyperparser.py sr cCsg|]}t|tkqSr)r_ASCII_ID_FIRST_CHARS)rr rrr r sc@s\eZdZddZddZddZddZdd d Zed ddhZ e ddZ dZ ddZ dS) HyperParserc sJ|_|j_}t|j|j}dd}|||}|jsxh|jD]^}t ||d}t |d} d|} | | | | d| || } | dk s|dkrFPqFW|| 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)ri)selfrr 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) rrrrparserrZlnocontextZstartatZ startatindexrZbodrr)rr __init__s:         zHyperParser.__init__cCst|jt|j||j}|dkr2td|||_d|_x@|jt|jdkr~|j|jdd|jkr~|jd7_q@W|jt|jdkr|j|jdd|jkr|j |jds|jd7_dS)Nrz(Index %s precedes the analyzed statementr) r!rrrr ValueErrorindexinrawtext indexbracketrr")rrr)rrr r#QszHyperParser.set_indexcCs&|j|jo$|j|j|jddkS)Nr)"')r"r*rr)rrrr is_in_stringfs zHyperParser.is_in_stringcCs(|j|j p&|j|j|jddkS)Nr)#r+r,)r"r*rr)rrrr is_in_codenszHyperParser.is_in_code([{FcCsL|j|jd}|j}x`|j|rL|j|j|d|ksL|j|d|krv|d8}|dkr`dSt||j|d}qW|jd}x,|t|jkr|j|d|kr|d7}qW|jd|jt|j|j|df}|t|jks|j|dt|jkr|rdS|j}n.|jd|jt|j|j|ddf}||fS)Nrrz%s-%dc) rr*r"rminr!rrr)rZopenersZ mustcloseZbracketinglevelZbeforeZafterZ beforeindexZ afterindexrrr get_surrounding_bracketsts0    ""z$HyperParser.get_surrounding_bracketsTrueFalseNonecCsdt}|}x<||krDt||ddkrD|t||drD|d8}q W||krt||ddkrx0|d|krd||d|r|d8}qhW|d|krd||d|r|d8}|d|krd||d|r|d8}|||s(dSn ||kr(tt||s(dS||kr\t|||r\||||jkr\dS||S)Nrr ar)_IS_ASCII_ID_CHARord isidentifier_IS_ASCII_ID_FIRST_CHARr _ID_KEYWORDS)clsstrlimitposZis_ascii_id_charrrrr _eat_identifiers.   & $$  zHyperParser._eat_identifierz \c Cs|std|j}|j}|j}||d}|j}|}d}xx||krf||d|jkrf|d8}qB|s||kr||ddkr|d8}d}qB||kr|dkr|||dddkr|d8}||d}||dd}qBPqBW|sP||||}|r||}|}d}q@||kr||d} x.|dkrT||dd| krT|d8}q(W||d|krjP||d}|d8}||d}|}||d krn@||d krx*|dkr||dd kr|d8}qW|}Pq@Pq@W|||jS) Nz?get_expression should only be called if index is inside a code.rTr.r.r8Fz([z'"ZrRbBuU)r/r(rrr*r)_whitespace_charsrB) rrrZ brck_indexZ brck_limitrAZlast_identifier_posZ postdot_phaseretlevelrrr get_expressionsb     "  zHyperParser.get_expressionN)r0F)__name__ __module__ __qualname__r'r#r-r/r2 frozensetr= classmethodrBrDrGrrrr rs7 , :r__main__)mainz"idlelib.idle_test.test_hyperparserr8) verbosity)keywordrstringZidlelibrrKZ ascii_lettersdigitsrr r r9r<rrHZunittestrNrrrr s