a  ze@s~dZddlZddlmZmZmZddlmZddZGdddZd d Z d d Z d dZ e dkrzddl mZeddddS)z'Define SearchEngine for search dialogs.N) StringVar BooleanVarTclError) messageboxcCst|dst||_|jS)zReturn the singleton SearchEngine instance for the process. The single SearchEngine saves settings between dialog instances. If there is not a SearchEngine already, make one. _searchengine)hasattr SearchEnginer)rootr H/opt/bitninja-python-dojo/embedded/lib/python3.9/idlelib/searchengine.pygets  r c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZd"ddZd#ddZd$ddZd%d d!ZdS)&rzr5r4r r r r rs  ( rcCsj||}|sdSd}|\}}||krf||krf|}||krF|d}|||}|sXqf|\}}q"|S)a&Search backwards and return an re match object or None. This is done by searching forwards until there is no match. Prog: compiled re object with a search method returning a match. Chars: line of text, without \n. Col: stop index for the search; the limit for match.end(). Nr@)rBspan)r-rFr1rGfoundijr r r rIs   rIcCsRz|d}|d}Wnty2d}}Yn0|sB|d}|sJ|}||fS)zFReturn tuple of 'line.col' indexes from selection or insert mark. z sel.firstzsel.lastNinsert)rJr)r6r9r:r r r r2s   r2cCstt|d\}}||fS)z8Return (line, col) tuple of ints from 'line.col' string.rH)rKrLrM)rJr<r1r r r r3sr3__main__)mainz#idlelib.idle_test.test_searchengine) verbosity)rRr"tkinterrrrrr rrIr2r3rOZunittestrYr r r r s  +