'Search a text widget for the pattern.
If prog is given, it should be the precompiled pattern.
Return a tuple (lineno, matchobj); None if not found.
This obeys the wrap and direction (back) settings.
The search starts at the selection (if there is one) or
at the insert mark (otherwise).  If the search is forward,
it starts at the right of the selection; for a backward
search, it starts at the left end.  An empty match exactly
at either end of the selection (or at the insert mark if
there is no selection) is ignored  unless the ok flag is true
-- this is done to guarantee progress.
If the search is allowed to wrap around, it will return the
original selection if (and only if) it is the only match.'

def search_text(self, text, prog=None, ok=0):

    if (not prog):
        prog = self.getprog()
        if (not prog):
            return None
    wrap = self.wrapvar.get()
    (first, last) = get_selection(text)
    if self.isback():
        if ok:
            start = last
        else:
            start = first
        (line, col) = get_line_col(start)
        res = self.search_backward(text, prog, line, col, wrap, ok)
    else:
        if ok:
            start = first
        else:
            start = last
        (line, col) = get_line_col(start)
        res = self.search_forward(text, prog, line, col, wrap, ok)
    return res
