B YI~dS2ã@s˜ddlmZddlZddlmZeejejdƒZeejdƒZ dd„e dƒDƒZ dd„e dƒDƒZ Gd d „d ƒZ ed kr”dd lmZed dd�dS)é)Ú iskeywordN)ÚpyparseÚ_cCsg|]}t|ƒtk‘qS©)ÚchrÚ_ASCII_ID_CHARS)Ú.0Úxrrú8/opt/alt/python37/lib64/python3.7/idlelib/hyperparser.pyú sr é€cCsg|]}t|ƒtk‘qSr)rÚ_ASCII_ID_FIRST_CHARS)rr rrr r sc@s\eZdZdd„Zdd„Zdd„Zdd„Zdd d „Zed ddhƒZ e dd„ƒZ dZ dd„Z dS)Ú HyperParserc sJ|ˆ_|jˆ_}t |j|j¡}dd„}|| |¡ƒ}|js¸xh|jD]^}t ||dƒ}t |ƒd} d|} |  |  | | ¡d¡|  | | ¡¡} | dk s¢|dkrFPqFW| | p²d¡nF| d|¡} | rÒ| d} nd } d|} |  |  | | ¡d¡| d¡|jdd …ˆ_| ˆ_| ¡ˆ_‡fd d „ttˆjƒƒDƒˆ_ˆ |¡dS) NcSs tt|ƒƒS)N)ÚintÚfloat)Úindexrrr Ú index2line"sz(HyperParser.__init__..index2lineéz.0z%d.endz rZconsolez1.0éþÿÿÿcs4g|],}|dko.ˆj|dˆj|ddk‘qS)rr)Ú bracketing)rÚi)Úselfrr r Ksz(HyperParser.__init__..)ÚeditwinÚtextrZParserZ indentwidthZtabwidthrZprompt_last_lineZnum_context_linesÚmaxÚreprZset_codeÚgetZfind_good_parse_startZ_build_char_in_string_funcZset_loZ tag_prevrangeÚcodeÚrawtextÚ stopatindexZget_last_stmt_bracketingrÚrangeÚlenÚisopenerÚ set_index) rrrrÚparserrZlnoÚcontextZstartatZ startatindexrZbodÚrr)rr Ú__init__s:         zHyperParser.__init__cCsÐt|jƒt|j ||j¡ƒ}|dkr2td|ƒ‚||_d|_x@|jt|jƒdkr~|j|jdd|jkr~|jd7_q@W|jt|jƒdkrÌ|j|jdd|jkrÌ|j |jdsÌ|jd7_dS)Nrz(Index %s precedes the analyzed statementr) r!rrrrÚ ValueErrorÚindexinrawtextÚ 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|jƒkr®|j|d|kr®|d7}q„W|j d|jt|jƒ|j|df¡}|t|jƒk�s|j|dt|jƒk�r|�rdS|j}n.|j d|jt|jƒ|j|ddf¡}||fS)Nrrz%s-%dc) rr*r"rÚminr!rrr)rZopenersZ mustcloseZbracketinglevelZbeforeZafterZ beforeindexZ afterindexrrr Úget_surrounding_bracketsts0    ""z$HyperParser.get_surrounding_bracketsÚTrueÚFalseÚNonecCsdt}|}x<||krDt||dƒdkrD|t||dƒrD|d8}q W||k�rt||dƒdk�rx0|d|kr–d||d|… ¡r–|d8}qhW|d|krÄd||d|… ¡rÄ|d8}|d|krðd||d|… ¡rð|d8}|||… ¡�s(dSn ||k�r(tt||ƒ�s(dS||k�r\t|||…ƒ�r\|||…|jk�r\dS||S)Nrr éÚaér)Ú_IS_ASCII_ID_CHARÚordÚ isidentifierÚ_IS_ASCII_ID_FIRST_CHARrÚ _ID_KEYWORDS)ÚclsÚstrÚlimitÚposZis_ascii_id_charrrrr Ú_eat_identifier¢s.   & $$  zHyperParser._eat_identifierz \c Csô| ¡stdƒ‚|j}|j}|j}||d}|j}|}d}�x¦x¢||krf||d|jkrf|d8}qB|s�||kr�||ddkr�|d8}d}qB||krÞ|dkrÞ|||dddkrÞ|d8}||d}||dd}qBPqBW|sêP| |||¡}|�r||}|}d}q@||k�rà||d} x.|dk�rT||dd| k�rT|d8}�q(W||d|k�rjP||d}|d8}||d}|}||d k�ržn@||d k�rÜx*|dk�rÖ||dd k�rÖ|d8}�q®W|}Pq@Pq@W|||j…S) 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_phaseÚretÚlevelrrr Úget_expressionÞsb     "  zHyperParser.get_expressionN)r0F)Ú__name__Ú __module__Ú __qualname__r'r#r-r/r2Ú frozensetr=Ú classmethodrBrDrGrrrr rs7 , :rÚ__main__)Úmainz"idlelib.idle_test.test_hyperparserr8)Ú verbosity)ÚkeywordrÚstringZidlelibrrKZ ascii_lettersÚdigitsrr r r9r<rrHZunittestrNrrrr Ús