Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
ca64d25d
Kaydet (Commit)
ca64d25d
authored
Agu 19, 2013
tarafından
Terry Jan Reedy
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Issue #18489: idlelib.SearchEngine - add docstrings
(original patch by Phil Webster).
üst
3f4f3ba1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
37 additions
and
25 deletions
+37
-25
SearchEngine.py
Lib/idlelib/SearchEngine.py
+37
-25
No files found.
Lib/idlelib/SearchEngine.py
Dosyayı görüntüle @
ca64d25d
'''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 @@ class SearchEngine:
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 @@ class SearchEngine:
return
prog
def
report_error
(
self
,
pat
,
msg
,
col
=-
1
):
# Derived class could overrid this with something fancier
# Derived class could overrid
e
this with something fancier
msg
=
"Error: "
+
str
(
msg
)
if
pat
:
msg
=
msg
+
"
\n
p
\
Pattern: "
+
str
(
pat
)
...
...
@@ -92,25 +102,23 @@ class SearchEngine:
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 foun
d.
If prog is given, it should be
a
precompiled pattern.
Wrap (yes/no) and direction (forward/back) settings are use
d.
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 @@ class SearchEngine:
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).
This is done by searching forwards until there is no match.
'''
m
=
prog
.
search
(
chars
)
if
not
m
:
return
None
...
...
@@ -198,10 +207,9 @@ def search_reverse(prog, chars, col):
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 @@ def get_selection(text):
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)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment