Edit Book: Fix a bug in the new text search facility that could cause searches to fail when searching from the current cursor position instead of the top of the file. Fixes #1588778 [Search with tags](https://bugs.launchpad.net/calibre/+bug/1588778)

This commit is contained in:
Kovid Goyal 2016-06-04 09:05:41 +05:30
parent 6f5cd87990
commit 5b84dcb722
2 changed files with 7 additions and 16 deletions

View File

@ -675,13 +675,13 @@ class Smarts(NullSmarts):
def find_text(self, pat, cursor):
from calibre.gui2.tweak_book.text_search import find_text_in_chunks
chunks = []
c = QTextCursor(cursor)
c.setPosition(0)
in_text = True
block = c.block()
cstart = min(cursor.position(), cursor.anchor())
cend = max(cursor.position(), cursor.anchor())
c = QTextCursor(cursor)
c.setPosition(cstart)
block = c.block()
in_text = find_tag_definition(block, 0)[0] is None
def append(text, start):
after = start + len(text)
@ -694,7 +694,7 @@ class Smarts(NullSmarts):
text = text[extra:]
chunks.append((text, start + max(extra, 0)))
while block.isValid() and block.position() <= cend and block.position() + block.length() > cstart:
while block.isValid() and block.position() <= cend:
boundaries = sorted(block.userData().tags, key=get_offset)
if not boundaries:
# Add the whole line

View File

@ -392,17 +392,8 @@ class TextEdit(PlainTextEdit):
start, end = m.span()
if start == end:
return False
if wrap and not complete:
if reverse:
textpos = c.anchor()
start, end = textpos + end, textpos + start
else:
if reverse:
# Put the cursor at the start of the match
start, end = end, start
else:
textpos = c.anchor()
start, end = textpos + start, textpos + end
c.clearSelection()
c.setPosition(start)
c.setPosition(end, c.KeepAnchor)