3 2aR2@sddlmZddlZddlmZeejejdZeejdZ dde dDZ dde dDZ Gd d d Z ed krdd lmZed dddS)) iskeywordN)pyparse_cCsg|]}t|tkqS)chr_ASCII_ID_CHARS).0xrr0/opt/alt/python36/lib64/python3.6/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_}tj|j|j}dd}||j|}|jsxh|jD]^}t ||d}t |d} d|} |j |j | | d|j |j| } | dk s|dkrFPqFW|j| pdnF|jd|} | r| d} nd } d|} |j |j | | d|jd|jdd _| _|j_fd d ttjD_j|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 indentwidthZtabwidthrZcontext_use_ps1Znum_context_linesmaxreprZset_codegetZfind_good_parse_startZ_build_char_in_string_funcZset_loZ tag_prevrangecoderawtext stopatindexZget_last_stmt_bracketingrrangelenisopener set_index) rrrrparserrZlnocontextZstartatZ startatindexr Zbodrr)rr __init__s:         zHyperParser.__init__cCst|jt|jj||j}|dkr2td|||_d|_x@|jt|jdkr~|j|jdd|jkr~|jd7_q@W|jt|jdkr|j|jdd|jkr|j |jd r|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-)r#r+rr)rrrr is_in_stringfs zHyperParser.is_in_stringcCs(|j|j p&|j|j|jddkS)Nr#r,r-)r/r,r-)r#r+rr)rrrr is_in_codenszHyperParser.is_in_code([{FcCsN|j|jd}|j}xb|j| sN|j|j|d|ksN|j|d|krx|d8}|dkrbdSt||j|d}qW|jd}x,|t|jkr|j|d|kr|d7}qW|jjd|jt|j|j|df}|t|jks|j|dt|jkr|rdS|j}n.|jjd|jt|j|j|ddf}||fS)Nrrz%s-%dc) rr+r#rminr"rrr )rZopenersZ mustcloseZbracketinglevelZbeforeafterZ beforeindexZ afterindexrrr get_surrounding_bracketsts0   ""z$HyperParser.get_surrounding_bracketsTrueFalseNonecCsbt}|}x<||krDt||ddkrD|t||drD|d8}q W||ko`t||ddkrx0|d|krd||d|jr|d8}qfW|d|krd||d|jr|d8}|d|krd||d|jr|d8}|||js&dSn ||kr&tt||s&dS||krZt|||rZ||||jkrZdS||S)Nrr arr)_IS_ASCII_ID_CHARord isidentifier_IS_ASCII_ID_FIRST_CHARr _ID_KEYWORDS)clsstrlimitposZis_ascii_id_charrrrr _eat_identifiers.  & $$  zHyperParser._eat_identifierz \c Cs|jstd|j}|j}|j}||d}|j}|}d}xx||krf||d|jkrf|d8}qB| r||kr||ddkr|d8}d}qB||kr|dkr|||dddkr|d8}||d}||dd}qBPqBW|sP|j|||}|r||}|}d}q@||kr||d} x.|dkrV||dd| krV|d8}q*W||d|krlP||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/rFz([z'"ZrRbBuU)r0r)rrr+r*_whitespace_charsrC) rrrZ brck_indexZ brck_limitrBZlast_identifier_posZ postdot_phaseretlevelrrr get_expressionsb     "  zHyperParser.get_expressionN)r1F)__name__ __module__ __qualname__r(r$r.r0r4 frozensetr> classmethodrCrErHrrrr rs7 , :r__main__)mainz"idlelib.idle_test.test_hyperparserr) verbosity)keywordrstringZidlelibrrLZ ascii_lettersdigitsrr r!r:r=rrIZunittestrOrrrr s