a 9êdgÂã@szddlZddlmZmZmZddlmZdd„ZGdd„dƒZdd „Zd d „Z d d „Z e dkrvddl m Z e ddddS)éN)Ú StringVarÚ BooleanVarÚTclError)Ú messageboxcCst|dƒst|ƒ|_|jS)NÚ _searchengine)ÚhasattrÚ SearchEnginer)Úroot©r ú0/usr/local/lib/python3.9/idlelib/searchengine.pyÚgets  r c@sŒeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z d!dd„Zd"dd„Zd#dd„Zd$dd „ZdS)%rcCsR||_t|dƒ|_t|dƒ|_t|dƒ|_t|dƒ|_t|dƒ|_t|dƒ|_dS)NÚFT) r rÚpatvarrÚrevarÚcasevarÚwordvarÚwrapvarÚbackvar)Úselfr r r r Ú__init__s     zSearchEngine.__init__cCs |j ¡S©N)rr ©rr r r Úgetpat%szSearchEngine.getpatcCs|j |¡dSr)rÚset©rÚpatr r r Úsetpat(szSearchEngine.setpatcCs |j ¡Sr)rr rr r r Úisre+szSearchEngine.isrecCs |j ¡Sr)rr rr r r Úiscase.szSearchEngine.iscasecCs |j ¡Sr)rr rr r r Úisword1szSearchEngine.iswordcCs |j ¡Sr)rr rr r r Úiswrap4szSearchEngine.iswrapcCs |j ¡Sr)rr rr r r Úisback7szSearchEngine.isbackcCs | ¡rt |¡}| |¡dSr)rÚreÚescaperrr r r Ú setcookedpat<s zSearchEngine.setcookedpatcCs.| ¡}| ¡st |¡}| ¡r*d|}|S)Nz\b%s\b)rrr"r#rrr r r Ú getcookedpatCs  zSearchEngine.getcookedpatc CsŠ| ¡}|s| |d¡dS| ¡}d}| ¡s:|tjB}zt ||¡}Wn:tjy„}z | ||j|j ¡WYd}~dSd}~00|S)NzEmpty regular expressionr) rÚ report_errorr%rr"Ú IGNORECASEÚcompileÚerrorÚmsgÚpos)rrÚflagsÚprogÚer r r ÚgetprogKs  zSearchEngine.getprogNcCsNdt|ƒ}|r |dt|ƒ}|dur8|dt|ƒ}tjd||jddS)NzError: z Pattern: z Offset: zRegular expression error)Zmaster)ÚstrrZ showerrorr )rrr*Úcolr r r r&\s ÿzSearchEngine.report_errorrc Cs”|s| ¡}|sdS|j ¡}t|ƒ\}}| ¡rb|r<|}n|}t|ƒ\}} | |||| ||¡} n.|rl|}n|}t|ƒ\}} | |||| ||¡} | Sr)r/rr Ú get_selectionr!Ú get_line_colÚsearch_backwardÚsearch_forward) rÚtextr-ÚokÚwrapÚfirstÚlastÚstartÚliner1Úresr r r Ú search_textfs$    zSearchEngine.search_textc Cs°d}|}| d|d|d¡} | r¬| | dd…|¡} | rT|sL|  ¡|krT|| fS|d}|rj||krjq¬d}d}| d|d|d¡} | s |r d}d}d}| dd¡} q dS)Nrú%d.0ééÿÿÿÿz1.0z2.0)r ÚsearchÚend) rr6r-r<r1r8r7ÚwrappedÚ startlineÚcharsÚmr r r r5Žs( zSearchEngine.search_forwardc CsÈd}|}| d|d|d¡} t|| dd…|ƒ} | rP|sH|  ¡|krP|| fS|d}|rf||krfqÄd}|dkrž|sxqÄd}d}| d¡} tt|  d¡ƒ\}}| d|d|d¡} t| ƒd}q dS)Nrr?r@rAzend-1cÚ.)r Úsearch_reverser;ÚindexÚmapÚintÚsplitÚlen) rr6r-r<r1r8r7rDrErFrGr+r r r r4¤s*  zSearchEngine.search_backward)N)Nr)r)r)Ú__name__Ú __module__Ú __qualname__rrrrrrr r!r$r%r/r&r>r5r4r r r r rs ( rcCsj| |¡}|sdSd}| ¡\}}||krf||krf|}||krF|d}| ||¡}|sXqf| ¡\}}q"|S)Nr@)rBÚspan)r-rFr1rGÚfoundÚiÚjr r r rI½s   rIcCsRz| d¡}| d¡}Wnty2d}}Yn0|sB| d¡}|sJ|}||fS)Nz sel.firstzsel.lastÚinsert)rJr)r6r9r:r r r r2Ôs   r2cCstt| d¡ƒ\}}||fS)NrH)rKrLrM)rJr<r1r r r r3âsr3Ú__main__)Úmainz#idlelib.idle_test.test_searchengineé)Ú verbosity)r"Útkinterrrrrr rrIr2r3rOZunittestrXr r r r Ús  +