Ë ö&r`ìnY€ãój—dZddlZddlZddlZddlZddlmZmZddl m Z m Z m Z m Z mZmZddlmZmZmZmZmZddl mZddlmZddlmZGd „d e «ZGd „d e«ZGd „de«ZGd„de«ZGd„de«ZGd„de«Z e!dk(r"ddl"m#Z#e#ddd¬«ddl$m%Z%e%eee «yy)a| Dialogs that query users and verify the answer before accepting. Query is the generic base class for a popup dialog. The user must either enter a valid answer or close the dialog. Entries are validated when is entered or [Ok] is clicked. Entries are ignored when [Cancel] or [X] are clicked. The 'return value' is .result set to either a valid answer or None. Subclass SectionName gets a name for a new config file section. Configdialog uses it for new highlight theme and keybinding set names. Subclass ModuleName gets a name for File => Open Module. Subclass HelpSource gets menu item and path for additions to Help menu. éN)Ú executableÚplatform)ÚToplevelÚ StringVarÚ BooleanVarÚWÚEÚS)ÚFrameÚButtonÚEntryÚLabelÚ Checkbutton)Ú filedialog)ÚFont)Ú _setup_dialogcó`‡—eZdZdZdidddœd„Zd d„Zd„Zdd„Zd „Zdd „Z dd „Z ˆfd „Z ˆxZ S)ÚQueryzoBase class for getting verified answer from a user. For this base class, accept any non-blank string. ÚF©Útext0Ú used_namesÚ_htestÚ_utestcó(—||_||_||_||_t j ||«|j «|j|«|j|«|s|j«t|«|jdk(r|jd|j«|jd|j«|jd|j«|jd|j«|jd|j«|j!«|j#«|j%d|j'«|j)«dz |j+«dz z z|j-«|s'|j/«dz |j1«dz z nd zfz«|j3d d ¬ «|s;|j5«|j6j9«|j;«y y ) aáCreate modal popup, return when destroyed. Additional subclass init must be done before this unless _utest=True is passed to suppress wait_window(). title - string, title of popup dialog message - string, informational message to display text0 - initial value for entry used_names - names already in use _htest - bool, change box location when running htest _utest - bool, leave window hidden and not modal Úaquaz z ÚWM_DELETE_WINDOWz z z+%d+%déé–F)ÚheightÚwidthN)ÚparentÚmessagerrrÚ__init__ÚwithdrawÚtitleÚ transientÚgrab_setrÚ_windowingsystemÚbindÚcancelÚprotocolÚokÚcreate_widgetsÚupdate_idletasksÚgeometryÚ winfo_rootxÚ winfo_widthÚwinfo_reqwidthÚ winfo_rootyÚ winfo_heightÚwinfo_reqheightÚ resizableÚ deiconifyÚentryÚ focus_setÚ wait_window)Úselfr"r&r#rrrrs ú$/usr/lib/python3.12/idlelib/query.pyr$zQuery.__init__&s²€ðˆŒ ؈Œ ؈Œ Ø$ˆŒä×ј$ Ô'Ø � ‰ ŒØ � ‰ �5ÔØ �‰�vÔÙØ �M‰MŒOä�dÔØ × Ñ  FÒ *Ø �I‰I�m T§[¡[Ô 1Ø � ‰ �. $§+¡+Ô.Ø � ‰ Ð(¨$¯+©+Ô6Ø � ‰ �. $§'¡'Ô*Ø � ‰ �, §¡Ô(à ×ÑÔØ ×ÑÔØ � ‰ ØØ×&Ñ&Ó(Ø×'Ñ'Ó)¨!Ñ+¨d×.AÑ.AÓ.CÀAÑ.EÑEñGà×&Ñ&Ó(á!ð×)Ñ)Ó+¨AÑ-°×0DÑ0DÓ0FÀqÑ0HÒHØ'*ñ,ðñô ð �‰˜e¨5ˆÔ1áØ �N‰NÔ Ø �J‰J× Ñ Ô "Ø × Ñ Õ ðóc ó†—t|d¬«x|_}|jddd¬«|jdd¬«t |dd |j ¬ «}t ||j«|_t|d |j¬ «|_ td d|j¬«|_ t |dd|j¬«|_|jddddt¬«|jjddddtt zddg¬«|jjddddtt z¬«|j#«t%||d|j&¬«|_t%|d|j*¬«|_|j(jddd¬«|j,jddd¬«y)zˆCreate entry (rows, extras, buttons. Entry stuff on rows 0-2, spanning cols 0-2. Buttons on row 99, cols 1, 2. é )ÚpaddingrÚnews)ÚcolumnÚrowÚstickyé)ÚweightÚwÚleft©ÚanchorÚjustifyÚtexté)r!Ú textvariableÚ TkCaptionFontT)ÚnameÚexistsÚrootÚ Úred©rMÚ foregroundÚfontéé©rCrDÚ columnspanÚpadxrE©rCrDr\r]rEÚpadyrÚactive)rMÚdefaultÚcommandÚCancel)rMrbéc)rCrDr]N)r ÚframeÚgridÚgrid_columnconfigurerr#rrÚentryvarr r9rr"Ú error_fontÚ entry_errorrr Ú create_extrar r-Ú button_okr+Ú button_cancel)r<Úok_textreÚ entrylabels r=r.zQuery.create_widgetsYsŠ€ô# 4°Ô4Ð4ˆŒ �UØ � ‰ ˜! ¨6ˆ Ô2Ø ×"Ñ" 1¨QÐ"Ô/ä˜5¨°fØ $§ ¡ ô.ˆ ä! $¨¯ © Ó3ˆŒ ܘ5¨¸¿¹ÔGˆŒ Ü OØ&*°·±ô>ˆŒä  ¨S¸UØ&*§o¡oô7ˆÔð �‰˜q a°A¸AÄaˆÔHØ � ‰ �‰˜q a°A¸AÄaÌÁcØ  ˜Vð ô %à ×Ñ×Ñ Q¨A¸!À!Ü%&¤q¡Sð ô *ð ×ÑÔäØ˜G¨X¸t¿w¹wôHˆŒä#ؘH¨d¯k©kô;ˆÔð �‰×Ñ 1¨"°1ÐÔ5Ø ×Ñ×Ñ q¨b°qÐÕ9r>có—y©N©)r<s r=rkzQuery.create_extra}s€˜Dr>có0—d|z|xs |jd<y)NzERROR: rM)rj)r<r#Úwidgets r=Ú showerrorzQuery.showerrors€à/8¸7Ñ/BˆÒ #�4×#Ñ# VÒ,r>có~—|jj«j«}|s|jd«y|S)zReturn non-blank entry or None.z blank line.N)r9ÚgetÚstripru)r<r9s r=Úentry_okzQuery.entry_okƒs2€à— ‘ —‘Ó ×&Ñ&Ó(ˆÙØ �N‰N˜=Ô )ØØˆ r>cóª—d|jd<|j«}|�||_|j«y|jj «y)z�If entry is valid, bind it to 'result' and destroy tk widget. Otherwise leave dialog open for user to correct entry or cancel. rrMN)rjryÚresultÚdestroyr9r:)r<Úeventr9s r=r-zQuery.ok‹sG€ð $&ˆ×Ñ˜Ñ Ø— ‘ “ˆØ Р؈DŒKØ �L‰L�Nð �J‰J× Ñ Õ "r>có2—d|_|j«y)z0Set dialog result to None and destroy tk widget.N)r{r|)r<r}s r=r+z Query.cancel™s€àˆŒ Ø � ‰ �r>cóB•—|j«t‰|� «yrq)Ú grab_releaseÚsuperr|)r<Ú __class__s €r=r|z Query.destroyžsø€Ø ×ÑÔÜ ‰‰Õr>)ÚOKrq) Ú__name__Ú __module__Ú __qualname__Ú__doc__r$r.rkruryr-r+r|Ú __classcell__©r‚s@r=rr!sDø„ñð9;ÀrØ eô1óf":òH!óCòó #ó÷ ðr>rcó0‡—eZdZdZdddœˆfd„ Zd„ZˆxZS)Ú SectionNamez*Get a name for a config file section name.F©rrcó0•—t‰|�||||||¬«y)N)rrr©r�r$)r<r"r&r#rrrr‚s €r=r$zSectionName.__init__§s"ø€ä ‰Ñ˜ ¨¸JØ &¨vð õ 7r>cóþ—|jj«j«}|s|jd«yt |«dkDr|jd«y||j vr|jd«y|S)z2Return sensible ConfigParser section name or None.úno name specified.NrNz"name is longer than 30 characters.zname is already in use.)r9rwrxruÚlenr)r<rQs r=ryzSectionName.entry_ok¬sj€à�z‰z�~‰~Ó×%Ñ%Ó'ˆÙØ �N‰NÐ/Ô 0ØÜ �‹Y�rŠ\Ø �N‰NÐ?Ô @ØØ �T—_‘_Ñ $Ø �N‰NÐ4Ô 5ØØˆ r>©r„r…r†r‡r$ryrˆr‰s@r=r‹r‹£sø„Ù0ð!¨ö7ö r>r‹có0‡—eZdZdZdddœˆfd„ Zd„ZˆxZS)Ú ModuleNamez-Get a module name for Open Module menu entry.FrŒcó0•—t‰|�||||||¬«y)N©rrrrŽ)r<r"r&r#rrrr‚s €r=r$zModuleName.__init__¿s"ø€ä ‰Ñ˜ ¨°uØ$¨Vð õ 5r>cóØ—|jj«j«}|s|jd«y tj j |«}|€|jd«yt|jtjj«s|jd«y |jj|«}|S#ttf$r$}|jt|««Yd}~yd}~wwxYw#t$r|jd«Yyt$r@ |jj«}Y|S#t $r|jd«YYywxYwwxYw)z0Return entered module name as file path or None.r�Nzmodule not found.znot a source-based module.z%loader does not support get_filename.zloader failed to get filename.)r9rwrxruÚ importlibÚutilÚ find_specÚ ValueErrorÚ ImportErrorÚstrÚ isinstanceÚloaderÚabcÚ SourceLoaderÚ get_filenameÚAttributeErrorÚ TypeError)r<rQÚspecÚmsgÚ file_paths r=ryzModuleName.entry_okÄs9€à�z‰z�~‰~Ó×%Ñ%Ó'ˆÙØ �N‰NÐ/Ô 0Øð Ü—>‘>×+Ñ+¨DÓ1ˆDð ˆ<Ø �N‰NÐ.Ô /ØÜ˜$Ÿ+™+¤y§}¡}×'AÑ'AÔBØ �N‰NÐ7Ô 8Øð ØŸ ™ ×0Ñ0°Ó6ˆIðÐøô+œKÐ(ò Ø �N‰Nœ3˜s›8Ô $Üûð ûôò Ø �N‰NÐBÔ CÙÜò ð Ø ŸK™K×4Ñ4Ó6‘ ðÐøôò Ø—‘Ð?Ô@Úð úð  úsG¾CÂ2DÃDÃC=Ã=DÄE)Ä!E)Ä*EÅE%Å!E)Å$E%Å%E)r’r‰s@r=r”r”»sø„Ù3ð!¨ö5ö r>r”có—eZdZdZd„Zy)ÚGotoz1Get a positive line number for editor Go To Line.có¼— t|jj««}|dkr|j d«y|S#t$r|j d«YywxYw)Nznot a base 10 integer.rznot a positive integer.)Úintr9rwr›ru)r<Úlinenos r=ryz Goto.entry_okés[€ð ܘŸ™Ÿ™Ó)Ó*ˆFð �QŠ;Ø �N‰NÐ4Ô 5ØØˆ øô ò Ø �N‰NÐ3Ô 4Ùð ús‚#>¾AÁAN)r„r…r†r‡ryrrr>r=r©r©ås „Ù7ó r>r©cóf‡—eZdZdZddidddœˆfd„ Zd„Zd„Zd„ZejZ d „Z d „Z ˆxZ S) Ú HelpSourcez,Get menu name and help source for Help menu.rF)ÚmenuitemÚfilepathrrrc óD•—||_d}t‰ |� |||||||¬«y)z·Get menu entry and url/local file for Additional Help. User enters a name for the Help resource and a web url or file name. The user can browse for the file. zName for item on Help menu:rN)r°r�r$) r<r"r&r¯r°rrrr#r‚s €r=r$zHelpSource.__init__ùs4ø€ð!ˆŒ Ø/ˆÜ ‰Ñؘ˜w¨hØ%¨f¸Vð õ Er>c óD—|j}t|ddd¬«}t||j«|_t ||jd¬«|_t|dd|j¬ «}t|d d |j¬ «|_ |jd ddddd gt¬«|j jd dddttzdd g¬«|jdddttz¬«|jjd dddttz¬«y)zAdd path widjets to rows 10-12.rHrIz,Help File Path: Enter URL or browse for filerJé()rOr!ÚBrowseé)rMr!rbrTrUrVrr@rYrZ)rCrDr\r]r_rEé rr^)rCrDr]rEé r[N)rerrr°Úpathvarr Úpathr Ú browse_fileriÚ path_errorrfrr r )r<reÚ pathlabelÚbrowses r=rkzHelpSource.create_extras€à— ‘ ˆÜ˜%¨°VØMôOˆ ä   t§}¡}Ó5ˆŒ ܘ%¨d¯l©lÀ"ÔEˆŒ ܘ H°AØ $× 0Ñ 0ô2ˆä ¨C¸EØ%)§_¡_ô6ˆŒð �‰˜a R°A¸AÀRÈÀFÜð ô !à � ‰ �‰˜a R°A¸AÄaÌÁcØ ˜Fð ô $à� ‰ ˜1 "¨1´Q´q±Sˆ Ô9Ø �‰×Ñ A¨2¸!À!Ü$%¤a¡Cð õ )r>cóR—tj||¬«j||¬«S)N)r"Ú filetypes)Ú initialdirÚ initialfile)rÚOpenÚshow)r<r¿ÚinitdirÚinitfiles r=Ú askfilenamezHelpSource.askfilenames%€ô�‰ d°iÔ@ß‘ °X�Ó>ð ?r>có—gd¢}|jj«}|r#tjj |«\}}n—d}t dddk(rutjj tjjt«d«}tjj|«s)tj«}ntj«}|j|||«}|r|jj|«yy)N))z HTML Filesz *.htm *.htmlÚTEXT)z PDF Filesz*.pdfrÈ)zWindows Help Filesz*.chm)z Text Filesz*.txtrÈ)z All FilesÚ*rYÚwinÚDoc) r¸rwÚosr¹ÚsplitrÚjoinÚdirnamerÚisdirÚgetcwdrÆÚset)r<r¿r¹ÚdirÚbaseÚfiles r=rºzHelpSource.browse_file!s¾€ò ˆ ð �|‰|×ÑÓ!ˆÙ ÜŸ™Ÿ ™  dÓ+‰IˆC‘àˆDܘ˜ˆ|˜uÒ$Ü—g‘g—l‘l¤2§7¡7§?¡?´:Ó#>ÀÓF�Ü—w‘w—}‘} SÔ)ÜŸ)™)›+‘Cä—i‘i“k�Ø×Ñ  ¨3°Ó5ˆÙ Ø �L‰L× Ñ ˜TÕ "ð r>cód—|jj«j«}|s|jd|j«y|j d«sW|dddk(r|dd}t jj|«s|jd|j«ytdk(rd|z}|S) z(Simple validity check for menu file pathzno help file path specified.N)zwww.ÚhttprZzfile:zhelp file path does not exist.Údarwinzfile://) r¹rwrxrur»Ú startswithrÌrRr)r<r¹s r=Úpath_okzHelpSource.path_ok9s™€à�y‰y�}‰}‹×$Ñ$Ó&ˆÙØ �N‰NÐ9¸4¿?¹?Ô KØØ—‘Ð!1Ô2Ø�B�Qˆx˜7Ò"ؘA˜B�x�Ü—7‘7—>‘> $Ô'Ø—‘Ð?Ø#Ÿ™ô0àܘ8Ò#Ø! DÑ(�؈ r>cót—d|jd<|j«}|j«}|�|€dS||fS)z,Return apparently valid (name, path) or NonerrMN)r»Úitem_okrÚ)r<rQr¹s r=ryzHelpSource.entry_okJs=€à"$ˆ�‰˜ÑØ�|‰|‹~ˆØ�|‰|‹~ˆØ�| t |ˆtÐE¸$À¸ÐEr>) r„r…r†r‡r$rkrÆrºr‹ryrÜrÚrˆr‰s@r=r®r®õsAø„Ù2ð35¸rØ u°Uö Eò)ò(?ò#ð,×"Ñ"€Gòö"Fr>r®có>‡—eZdZdZgdddœˆfd„ Zd„Zd„Zd„ZˆxZS)Ú CustomRunz†Get settings for custom run of module. 1. Command line arguments to extend sys.argv. 2. Whether to restart Shell or not. F)Úcli_argsrrcó4•—d}t‰|�||||||¬«y)z¢cli_args is a list of strings. The list is assigned to the default Entry StringVar. The strings are displayed joined by ' ' for display. z$Command Line Arguments for sys.argv:r–NrŽ)r<r"r&rßrrr#r‚s €r=r$zCustomRun.__init__Ys*ø€ð9ˆÜ ‰Ñؘ˜w¨hØ fð õ .r>có—|j}t|d¬«|_t||jddd¬«}t |dd|j ¬«|_|jd d d d d ¬«|j jd dd d d¬«y)zAdd run mode on rows 10-12.T)ÚvalueFz Restart shell)ÚvariableÚonvalueÚoffvaluerMrTrUrVrr@rYrZrHr[r·ÚweN)rerÚ restartvarrrriÚ args_errorrf)r<reÚrestarts r=rkzCustomRun.create_extraes†€à— ‘ ˆÜ$ T°Ô6ˆŒÜ˜e¨d¯o©oÀtØ',°?ôDˆä ¨C¸EØ%)§_¡_ô6ˆŒð � ‰ ˜A 2°!¸!ÀCˆ ÔHØ �‰×Ñ A¨2¸!À!Ø$(ð õ *r>cóæ—|jj«j«} tj|d¬«}|S#t $r$}|j t|««Yd}~yd}~wwxYw)z.Return command line arg list or None if error.T)ÚposixN)r9rwrxÚshlexrÍr›rur�)r<Ú cli_stringrßÚerrs r=Ú cli_args_okzCustomRun.cli_args_okrs\€à—Z‘Z—^‘^Ó%×+Ñ+Ó-ˆ ð Ü—{‘{ :°TÔ:ˆHðˆøôò Ø �N‰Nœ3˜s›8Ô $Üûð úsªAÁ A0Á A+Á+A0cóf—|j«}|jj«}|€dS||fS)z4Return apparently valid (cli_args, restart) or None.N)rïrçrw)r<rßrés r=ryzCustomRun.entry_ok|s7€à×#Ñ#Ó%ˆØ—/‘/×%Ñ%Ó'ˆØÐ'ˆtÐ@¨h¸Ð-@Ð@r>) r„r…r†r‡r$rkrïryrˆr‰s@r=rÞrÞQs'ø„ñð35Ø eö .ò *òöAr>rÞÚ__main__)Úmainzidlelib.idle_test.test_queryrF)Ú verbosityÚexit)Úrun)&r‡Úimportlib.utilr˜Ú importlib.abcrÌrìÚsysrrÚtkinterrrrrr r Ú tkinter.ttkr r r rrrÚ tkinter.fontrÚtkinter.simpledialogrrr‹r”r©r®rÞr„ÚunittestròÚidlelib.idle_test.htestrõrrr>r=Úrÿs¯ðñ ÷*%Û Û ß$ç<×<ß@Õ@ÝÝÝ.ôˆHôôD�%ôô0'�ô'ôT ˆ5ô ô ZF�ôZFôx/A�ô/Aðd ˆzÒÝÙÐ '°1¸5ÕAå+Ùˆˆz˜9Õ%ð r>