Ë Võ¸:I^Zãób—dZddlmZddlZddlmZeejejzdz«Z eejdz«Z e d«D�cgc] }e |«e v‘Œc}Z e d«D�cgc] }e |«e v‘Œc}ZGd„d«Zed k(rdd lmZed d ¬ «yycc}wcc}w)zîProvide advanced parsing abilities for ParenMatch and other extensions. HyperParser uses PyParser. PyParser mostly gives information on the proper indentation of code. HyperParser gives additional information on the structure of code. é)Ú iskeywordN)ÚpyparseÚ_é€cóZ—eZdZd„Zd„Zd„Zd„Zd d„Zehd£«Z e d„«Z dZ d „Z y ) Ú HyperParsercóø—||_|jx|_}tj|j|j «}d„}||j |««}|js–|jD]q}t||z d«}t|«dz} d|z} |j|j| | «dz«|j|j| ««} | €|dk(sŒqn|j xsd«nV|j!d|«} | r| d} nd } d|z} |j|j| | «dz«|jd«|j"dd |_ |_|j)«|_t-t/|j*««D� cgc]1} | dkDxr(|j*| d|j*| dz dkD‘Œ3c} |_|j3|«ycc} w) z;To initialize, analyze the surroundings of the given index.có*—tt|««S)N)ÚintÚfloat)Úindexs ú*/usr/lib/python3.12/idlelib/hyperparser.pyÚ index2linez(HyperParser.__init__..index2line"s€Ü”u˜U“|Ó$Ð $óéz.0z%d.endz NrÚconsolez1.0éþÿÿÿ)ÚeditwinÚtextrÚParserÚ indentwidthÚtabwidthr Úprompt_last_lineÚnum_context_linesÚmaxÚreprÚset_codeÚgetÚfind_good_parse_startÚ_build_char_in_string_funcÚset_loÚ tag_prevrangeÚcodeÚrawtextÚ stopatindexÚget_last_stmt_bracketingÚ bracketingÚrangeÚlenÚisopenerÚ set_index)Úselfrr rÚparserrÚlnoÚcontextÚstartatÚ startatindexr%ÚbodÚrÚis rÚ__init__zHyperParser.__init__sê€ðˆŒ Ø"Ÿ<™<Ð'ˆŒ �Dä—‘ × 3Ñ 3°W×5EÑ5EÓFˆò %ᘟ™ EÓ*Ó+ˆà×'Ò'Ø"×4Ô4�ܘc G™m¨QÓ/�Ü# G›}¨tÑ3� Ø&¨™n� ð —‘ §¡¨°{Ó CÀEÑ IÔJØ×2Ñ2Ø!×<Ñ<¸\ÓJóL�à�? g°£lÙð5ð �M‰M˜#š( Õ #à×"Ñ" 9¨eÓ4ˆAÙØ  ™t‘ à$� Ø" S™.ˆKð �O‰O˜DŸH™H \°;Ó?ÀÑEÔ FØ �M‰M˜!Ô ð—{‘{ 3 BÐ'ˆŒ ð'ˆÔØ ×9Ñ9Ó;ˆŒô #(¬¨D¯O©OÓ(<Ô"=ó?á"=˜Qð˜1™ò1 §¡°Ñ!3°AÑ!6ØŸ™¨¨1©Ñ-¨aÑ0ñ"1ñ1à"=ñ?ˆŒ ð �‰�uÕùò ?sÆ'6G7cóJ—t|j«t|jj||j««z }|dkrt d|z«‚||_d|_|jt|j«dz kr“|j|jdzd|j krg|xjdz c_|jt|j«dz kr-|j|jdzd|j krŒg|jt|j«dz kr`|j|jdzd|j k(r3|j|jdzs|xjdz c_yyyy)zgSet the index to which the functions relate. The index must be in the same statement. rz(Index %s precedes the analyzed statementrN) r)r$rrr%Ú ValueErrorÚindexinrawtextÚ indexbracketr'r*)r,r r8s rr+zHyperParser.set_indexQsy€ô ˜dŸl™lÓ+ܘdŸi™iŸm™m¨E°4×3CÑ3CÓDÓEñFˆà ˜AÒ ÜÐGØ$ñ%ó&ð &à,ˆÔàˆÔØ× Ñ ¤3 t§¡Ó#7¸Ñ#9Ò9Ø�‰˜t×0Ñ0°Ñ2Ñ3°AÑ6¸×9LÑ9LÒLØ × Ò  Ñ "Õ ð× Ñ ¤3 t§¡Ó#7¸Ñ#9Ò9Ø�‰˜t×0Ñ0°Ñ2Ñ3°AÑ6¸×9LÑ9LÓLà × Ñ ¤ D§O¡OÓ 4°QÑ 6Ò 6Ø �O‰O˜D×-Ñ-¨aÑ/Ñ 0°Ñ 3°t×7JÑ7JÒ JØ�}‰}˜T×.Ñ.¨qÑ0Ò1Ø × Ò  Ñ "Ö ð2ð Kð 7rcóŽ—|j|jxr+|j|j|jddvS)z2Is the index given to the HyperParser in a string?r)Ú"Ú'©r*r9r$r'©r,s rÚ is_in_stringzHyperParser.is_in_stringfsH€ð— ‘ ˜d×/Ñ/Ñ0òØ— ‘ ˜TŸ_™_¨T×->Ñ->Ñ?ÀÑBÑCØðð rcó�—|j|j xs+|j|j|jddvS)z5Is the index given to the HyperParser in normal code?r)Ú#r;r<r=r>s rÚ is_in_codezHyperParser.is_in_codensI€à—M‘M $×"3Ñ"3Ñ4Ð4ò'Ø— ‘ ˜TŸ_™_¨T×->Ñ->Ñ?ÀÑBÑCØ&ð'ð (rcóŒ—|j|jd}|j}|j|r6|j|j|d|vs|j|d|kDro|dz}|dkryt ||j|d«}|j|sŒ7|j|j|d|vrŒY|j|d|kDrŒo|jdz}|t |j«krH|j|d|k\r3|dz }|t |j«kr|j|d|k\rŒ3|j jd|jt |j«|j|dz fz«}|t |j«k\s(|j|dt |j«kDr|ry|j}||fS|j jd|jt |j«|j|ddz z fz«}||fS)a¼Return bracket indexes or None. If the index given to the HyperParser is surrounded by a bracket defined in openers (or at least has one before it), return the indices of the opening bracket and the closing bracket (or the end of line, whichever comes first). If it is not surrounded by brackets, or the end of line comes before the closing bracket and mustclose is True, returns None. rrNz%s-%dc) r'r9r*r$Úminr)rr r%)r,ÚopenersÚ mustcloseÚbracketinglevelÚbeforeÚafterÚ beforeindexÚ afterindexs rÚget_surrounding_bracketsz$HyperParser.get_surrounding_bracketsts6€ðŸ/™/¨$×*;Ñ*;Ñ<¸QÑ?ˆØ×"Ñ"ˆØ—=‘= Ò(Ø�l‰l˜4Ÿ?™?¨6Ñ2°1Ñ5Ñ6¸gÑEØ�o‰o˜fÑ% aÑ(¨?Ò:Ø �a‰KˆFؘŠzØÜ! /°4·?±?À6Ñ3JÈ1Ñ3MÓNˆOð —=‘= Ó(Ø�l‰l˜4Ÿ?™?¨6Ñ2°1Ñ5Ñ6¸gÒEØ�o‰o˜fÑ% aÑ(¨?Ó:ð ×!Ñ! AÑ%ˆØ”s˜4Ÿ?™?Ó+Ò+Ø�o‰o˜eÑ$ QÑ'¨?Ò:Ø �Q‰JˆEð”s˜4Ÿ?™?Ó+Ò+Ø�o‰o˜eÑ$ QÑ'¨?Ó:ð—i‘i—o‘o hØ × Ñ œs 4§<¡<Ó0°·±ÀÑ1HÈÑ1KÑKÐ Lñ'MóNˆ à ”S˜Ÿ™Ó)Ò )Ø �?‰?˜5Ñ ! !Ñ $¤s¨4¯<©<Ó'8Ò 8ÙØØ×)Ñ)ˆJð˜JÐ&Ð&ð Ÿ™Ÿ™Ø˜D×,Ñ,Ü�T—\‘\Ó" D§O¡O°EÑ$:¸1Ñ$=¸aÑ$?Ñ@ðBñBóCˆJð˜JÐ&Ð&r>ÚNoneÚTrueÚFalsecóÞ—t}|}||kDr[t||dz «dkrG|t||dz «r3|dz}||kDr)t||dz «dkr|t||dz «rŒ3||kDr¼t||dz «dk\r¨|dz |k\r@d||dz |zj«r'|dz}|dz |k\rd||dz |zj«rŒ'|dz |k\rd||dz |zj«r|dz}|dz |k\rd||dz |zj«r|dz}|||j«sy||krtt||«sy||kr t |||«r||||j vry||z S)zÈGiven a string and pos, return the number of chars in the identifier which ends at pos, or 0 if there is no such one. This ignores non-identifier eywords are not identifiers. rréÚaér)Ú_IS_ASCII_ID_CHARÚordÚ isidentifierÚ_IS_ASCII_ID_FIRST_CHARrÚ _ID_KEYWORDS)ÚclsÚstrÚlimitÚposÚis_ascii_id_charr4s rÚ_eat_identifierzHyperParser._eat_identifier¢s³€ô-Ðð ˆð �%ŠiÜ�C˜˜A™‘J“ #Ò%Ø ¤ S¨¨Q©¡Z£Ò1à �‰FˆAð �%ŠiÜ�C˜˜A™‘J“ #Ò%Ø ¤ S¨¨Q©¡Z£Ó1ð ˆuŠ9œ˜S  Q¡™Z›¨CÒ/Ø�a‘%˜5’. c¨C°°A±°c¨NÑ&:×%HÑ%HÔ%JØ�Q‘�ð�a‘%˜5’. c¨C°°A±°c¨NÑ&:×%HÑ%HÕ%Jà�1‰u˜Š~ 3¨¨Q°©U°3¨Ñ#7×"EÑ"EÔ"GØ�Q‘�Ø�1‰u˜Š~ 3¨¨Q°©U°3¨Ñ#7×"EÑ"EÔ"GØ�Q‘�ð �q˜�:×*Ñ*Ô,ØØ �ŠWô+¬3¨s°1©v«;Ò7Øð ˆsŠ7ܘ#˜a ˜*Ô%Ø�A�c�  #×"2Ñ"2Ñ2àà�Q‰wˆrz \có—|j«s td«‚|j}|j}|j}||d}|j }|}d} ||kDr||dz |j vr|dz}nO|s||kDr||dz dk(r|dz}d}n5||k(r/|dkDr*|||dz ddk(r|dz}||d}||dzd}nnŒo|sn´|j|||«}|r ||z }|}d}n“||k(r�||d} |dkDr'||dz d| kDr|dz}|dkDr||dz d| kDrŒ||d|k(rnP||d}|dz}||d}|}||d vrn/||d vr&|dkDr||dz d vr|dz}|dkDr ||dz d vrŒ|}nn�Œ'|||j S) z‚Return a string with the Python expression which ends at the given index, which is empty if there is no real one. z?get_expression should only be called if index is inside a code.rTrÚ.rArSFz([z'"ÚrRbBuU)rBr7r$r'r9r8Ú_whitespace_charsr^) r,r$r'Ú brck_indexÚ brck_limitr\Úlast_identifier_posÚ postdot_phaseÚretÚlevels rÚget_expressionzHyperParser.get_expressionÞso€ð�‰Ô Üð:ó;ð ;ð—,‘,ˆØ—_‘_ˆ à×&Ñ&ˆ Ø  Ñ+¨AÑ.ˆ Ø×!Ñ!ˆà!ÐØˆ ààØ�z’> g¨c°!©e¡n¸×8NÑ8NÑ&Nà˜1‘H‘CÙ'ؘJÒ&¨7°3°q±5©>¸SÒ+@à˜1‘H�CØ$(‘Mð˜ZÒ'¨J¸ªNؘj¨°A©Ñ6°qÑ9Ñ:¸cÒAà !‘O�JØ!+¨JÑ!7¸Ñ!:�JØ$ Z°¡\Ñ2°1Ñ5‘Cðð'ñ*!ðà×&Ñ& w° ¸CÓ@ˆCÙà˜C‘i�Ø&)Ð#à %‘ ð˜ Ò"ð# :Ñ.¨qÑ1�Ø  1’n¨°J¸q±LÑ)AÀ!Ñ)DÀuÒ)LØ !‘O�Jð! 1’n¨°J¸q±LÑ)AÀ!Ñ)DÀuÓ)Là˜jÑ)¨!Ñ,° Ò:àØ  Ñ,¨QÑ/�ؘa‘� Ø'¨ Ñ3°AÑ6� Ø&)Ð#ؘ3‘< 4Ñ'ðð˜s‘| uÑ,à! Ašg¨'°#¸±'Ñ*:¸hÑ*FØ 1™H˜Cð" Ašg¨'°#¸±'Ñ*:¸hÒ*Fà.1Ð+ØðñCðFÐ*¨4×+>Ñ+>Ð?Ð?rN)z([{F)Ú__name__Ú __module__Ú __qualname__r5r+r?rBrLÚ frozensetrXÚ classmethodr^rbri©rrrrsL„ò5òn#ò*ò(ó ('ñXÒ6Ó7€Làñ6óð6ðr"ÐóU@rrÚ__main__)Úmainz"idlelib.idle_test.test_hyperparserrS)Ú verbosity)Ú__doc__ÚkeywordrÚstringÚidlelibrrmÚ ascii_lettersÚdigitsÚ_ASCII_ID_CHARSÚ_ASCII_ID_FIRST_CHARSr(ÚchrrTrWrrjÚunittestrq)Úxs0rÚr~sÏðñõ Û åñ˜F×0Ñ0°6·=±=Ñ@À3ÑFÓG€á! &×"6Ñ"6¸Ñ"<Ó=Ðñ;@À¼*ÓE¹*°Q‘c˜!“f Ò/¸*ÑEÐñ16°c´ Ó;± ¨1�cˆ!ƒfÐ%Ò%° Ñ;ð÷Z@ñZ@ðz ˆzÒÝÙÐ -¸Ö;ðùòI Fùò