[Python-checkins] cpython (3.3): Issue #18489: idlelib.SearchEngine - add docstrings

terry.reedy python-checkins at python.org
Mon Aug 19 07:06:03 CEST 2013


http://hg.python.org/cpython/rev/cfb510884a13
changeset:   85257:cfb510884a13
branch:      3.3
parent:      85252:366ca21600c9
user:        Terry Jan Reedy <tjreedy at udel.edu>
date:        Mon Aug 19 01:05:19 2013 -0400
summary:
  Issue #18489: idlelib.SearchEngine - add docstrings
(original patch by Phil Webster).

files:
  Lib/idlelib/SearchEngine.py |  62 ++++++++++++++----------
  1 files changed, 37 insertions(+), 25 deletions(-)


diff --git a/Lib/idlelib/SearchEngine.py b/Lib/idlelib/SearchEngine.py
--- a/Lib/idlelib/SearchEngine.py
+++ b/Lib/idlelib/SearchEngine.py
@@ -1,19 +1,28 @@
+'''Define SearchEngine for search dialogs.'''
 import re
 from tkinter import *
 import tkinter.messagebox as tkMessageBox
 
 def get(root):
+    '''Return the singleton SearchEngine instance for the process.
+
+    The single SearchEngine saves settings between dialog instances.
+    If there is not a SearchEngine already, make one.
+    '''
     if not hasattr(root, "_searchengine"):
         root._searchengine = SearchEngine(root)
-        # XXX This will never garbage-collect -- who cares
+        # This creates a cycle that persists until root is deleted.
     return root._searchengine
 
 class SearchEngine:
+    """Handles searching a text widget for Find, Replace, and Grep."""
 
     def __init__(self, root):
+        '''Initialize Variables that save search state.
+
+        The dialogs bind these to the UI elements present in the dialogs.
+        '''
         self.root = root
-        # State shared by search, replace, and grep;
-        # the search dialogs bind these to UI elements.
         self.patvar = StringVar(root)           # search pattern
         self.revar = BooleanVar(root)           # regular expression?
         self.casevar = BooleanVar(root)         # match case?
@@ -56,6 +65,7 @@
         return pat
 
     def getprog(self):
+        "Return compiled cooked search pattern."
         pat = self.getpat()
         if not pat:
             self.report_error(pat, "Empty regular expression")
@@ -77,7 +87,7 @@
         return prog
 
     def report_error(self, pat, msg, col=-1):
-        # Derived class could overrid this with something fancier
+        # Derived class could override this with something fancier
         msg = "Error: " + str(msg)
         if pat:
             msg = msg + "\np\Pattern: " + str(pat)
@@ -92,25 +102,23 @@
         self.setpat(pat)
 
     def search_text(self, text, prog=None, ok=0):
-        """Search a text widget for the pattern.
+        '''Return (lineno, matchobj) for prog in text widget, or None.
 
-        If prog is given, it should be the precompiled pattern.
-        Return a tuple (lineno, matchobj); None if not found.
+        If prog is given, it should be a precompiled pattern.
+        Wrap (yes/no) and direction (forward/back) settings are used.
 
-        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.
+        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.
+        '''
 
-        """
         if not prog:
             prog = self.getprog()
             if not prog:
@@ -179,10 +187,11 @@
             col = len(chars) - 1
         return None
 
-# Helper to search backwards in a string.
-# (Optimized for the case where the pattern isn't found.)
+def search_reverse(prog, chars, col):
+    '''Search backwards in a string (line of text).
 
-def search_reverse(prog, chars, col):
+    This is done by searching forwards until there is no match.
+    '''
     m = prog.search(chars)
     if not m:
         return None
@@ -198,10 +207,9 @@
         i, j = m.span()
     return found
 
-# Helper to get selection end points, defaulting to insert mark.
-# Return a tuple of indices ("line.col" strings).
-
 def get_selection(text):
+    '''Return tuple of 'line.col' indexes from selection or insert mark.
+    '''
     try:
         first = text.index("sel.first")
         last = text.index("sel.last")
@@ -213,8 +221,12 @@
         last = first
     return first, last
 
-# Helper to parse a text index into a (line, col) tuple.
-
 def get_line_col(index):
+    '''Return (line, col) tuple of ints from 'line.col' string.'''
     line, col = map(int, index.split(".")) # Fails on invalid index
     return line, col
+
+##if __name__ == "__main__":
+##    from test import support; support.use_resources = ['gui']
+##    import unittest
+##    unittest.main('idlelib.idle_test.test_searchengine', verbosity=2, exit=False)

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list