JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrB  fN@sdZddlZddlTddlmZddlmZmZddlm Z dZ dZ e d fZ d Z d Zd Zd ZdZdZdZGdddZedkrddlmZedddddS)zH An auto-completion window for IDLE, used by the autocomplete extension N)*) Scrollbar)FILESATTRS)MC_SHIFTz<>z z z<>) zzz z zz z z z z z z!<>z zz zc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!S)"AutoCompleteWindowcCs||_d|_|_|_d|_|_d|_d|_d|_d|_ d|_ d|_ d|_ d|_ |_|_|_|_|_d|_d|_dS)NF)widgetautocompletewindowlistbox scrollbarorigselforegroundorigselbackground completionsmorecompletionsmodestart startindexlasttypedstartuserwantswindowZhideid keypressid listupdateid winconfigid keyreleaseid doubleclickidlastkey_was_tabis_configuring)selfrr;/opt/alt/python37/lib64/python3.7/idlelib/autocomplete_w.py__init__s $zAutoCompleteWindow.__init__cCstt|jt|}d}x&||kr>|j|||kr>|d7}qW|t|jkrv|jd|j|fd|jt|jf|t|kr|jd|j|f||d||_dS)Nrz%s+%dc)minlenrrdeleterinsert)rnewstartmin_lenirrr _change_start>s  z AutoCompleteWindow._change_startcCsXd}t|j}x4||krB||d}|j||kr8|}q|d}qWt|t|jdS)zFind the first index in self.completions where completions[i] is greater or equal to s, or the last index if there is no such. rr )r"rr!)rsr'jmrrr_binary_searchKs    z!AutoCompleteWindow._binary_searchc Cs||}|j|dt||kr(|S|d}t|j}x@||krz||d}|j|dt||krp|}q<|d}q| +t?|j@|_A| +tB|jC|_DdS)zShow the autocomplete list, bind events. If complete is True, complete the text, and if there is exactly one matching completion, don't open a list. r$r Nz +10000+10000z!::tk::unsupported::MacWindowStyleZstylehelpZ noActivates)ZorientF)ZyscrollcommandZexportselectionr1r0)Zcommand)sidefillT)r<r=expand)Errrrindexrgetrr/r(r-r"rrZToplevelr wm_geometryZwm_overrideredirectZtkZcallZ_wZTclErrorrZVERTICALr ZListboxsetr r$r6r5r r ZconfigZyviewZpackZRIGHTYZLEFTZBOTHZliftr7r8ZbindHIDE_VIRTUAL_EVENT_NAME hide_eventhideaidhidewidZ event_addHIDE_FOCUS_OUT_SEQUENCEHIDE_SEQUENCESKEYPRESS_VIRTUAL_EVENT_NAMEkeypress_eventrKEYPRESS_SEQUENCESKEYRELEASE_VIRTUAL_EVENT_NAMEkeyrelease_eventrKEYRELEASE_SEQUENCELISTUPDATE_SEQUENCElistselect_eventrrWINCONFIG_SEQUENCEwinconfig_eventrDOUBLECLICK_SEQUENCEdoubleclick_eventr)rZ comp_listsr?completerZ userWantsWinZ completedrr'acwr r r:seqrrr show_windowsn                 zAutoCompleteWindow.show_windowcCs|jr dSd|_|sdS|j}||j||j\}}}}|j}||| }} || } } | t |t d| |} | |} | ||| ks|| kr| |7} n| | 8} |d| | f|tdr|t|jd|_d|_dS)NTrz+%d+%dZWindowsF)r is_activerr4rZbboxr updateZ winfo_width winfo_heightZ winfo_rootxr!maxZ winfo_rootyrAZupdate_idletasksplatformsystem startswithunbindrRr)reventtextxyZcxZcyrWZ acw_widthZ acw_heightZ text_widthZ text_heightZnew_xZnew_yrrrrSs0   z"AutoCompleteWindow.winconfig_eventcCsB|js dSy|js|Wntk r<|YnXdS)N)r Z focus_get hide_windowKeyError)rrrr_hide_event_checks  z$AutoCompleteWindow._hide_event_checkcCs>|r:|jtjkr&|jd|jn|jtjkr:|dS)Nr ) rZtypeZ EventTypeZFocusOutrZafterrhZ ButtonPressrf)rrbrrrrEs   zAutoCompleteWindow.hide_eventcCs4|r0d|_t|jd}||j|dS)NTr)rZrr2r r3r(r)rrbr9rrrrQ(sz#AutoCompleteWindow.listselect_eventcCs.t|jd}||j||dS)Nr)r2r r3r(rrf)rrbr9rrrrU.sz$AutoCompleteWindow.doubleclick_eventcs |s dS|jt|dr$|j}nd}dkr6d|_tdks`dks`|jtkrJdkrJ|t@sJtdkr| |j n|dkr| |j d nbd kr| |j d nHd kr| |j d n.t|j dkr| dS| |j dd|j |_ |j dt|j d|j ||j |dSdkrh|| dS|jtkr~dks|jtkrdkr|t@st|j d}|j|dt|j |j kr|jtks|j r| |j|| dSdkr2|s2d|_t|j d}dkr:d}nĈdkrTt|jd}ndkr|j |j |j d}dkrtd||}n&dksttt|jd||}n@dkrtd|d}n&dksttt|jd|d}|j ||j ||| |j|dSdkr|s|jrxt|j d}| |j|| dSd|_d|_dSntfdddDrdS|jr|jdkr| |j |j|j |_ |j dt|j d|j ||j |dS| dSdS) Nmc_staterZTabFr ) underscoreZ BackSpace)periodminusrk_rl.rm-breakZReturn)rlZspaceZ parenleftZ parenrightZ bracketleftZ bracketright)ZslashZ backslashZquotedblZ apostrophe)HomeEndPriorNextUpDownTrsrt)rurvrurvrwrxc3s|]}|kVqdS)Nr).0r*)keysymrr sz4AutoCompleteWindow.keypress_event..)ZShiftZControlZAltZMetaZCommandZOption )rZrzhasattrrjrr"rrrr(rrfrr Z select_clearr2r3r7r-r8rVrrrZnearestr\r]AssertionErrorr!anychar)rrbstater9ZnewselZjumpr)rzrrK4s              z!AutoCompleteWindow.keypress_eventcCs@|s dS|jd|jd|jt|jfkr<|dS)Nr$z%s+%dc)rZrr?rr"rrf)rrbrrrrNs  z#AutoCompleteWindow.keyrelease_eventcCs |jdk S)N)r )rrrrrZszAutoCompleteWindow.is_activecCs|||jdS)N)r(r/r)rrrrrVszAutoCompleteWindow.completecCs(|s dS|jttxtD]}|jt|q W|jt|j|jt|j d|_d|_ xt D]}|jt |qhW|jt |j d|_ |jt t|jt |jd|_|jt|jd|_|jr|jt|jd|_|j|jd|_|jd|_|jd|_dS)N)rZr Z event_deleterDrHrIrrarFrGrLrJrrMrOrr rPrrrRZ focus_setr Zdestroy)rrXrrrrfs<      zAutoCompleteWindow.hide_windowN)__name__ __module__ __qualname__rr(r-r/r8rYrSrhrErQrUrKrNrZrVrfrrrrrs !   &L%  tr__main__)mainz%idlelib.idle_test.test_autocomplete_wr)F) verbosityexit)__doc__r^ZtkinterZ tkinter.ttkrZidlelib.autocompleterrZidlelib.multicallrrDrHrIrJrLrMrOrPrRrTrrZunittestrrrrrs,  G