pdf-viewer: add local search text.

master
luhuaei 6 years ago
parent e40ca4ef86
commit a8ca34e8a0
  1. 46
      app/pdf-viewer/buffer.py
  2. 3
      eaf.el

@ -44,6 +44,8 @@ class AppBuffer(Buffer):
self.buffer_widget.jump_to_percent(int(result_content))
elif result_type == "jump_link":
self.buffer_widget.jump_to_link(str(result_content))
elif result_type == "local_search_text":
self.buffer_widget.local_search_text(str(result_content))
def scroll(self, scroll_direction, scroll_type):
if scroll_type == "page":
@ -123,6 +125,12 @@ class AppBuffer(Buffer):
self.buffer_widget.add_mark_jump_link_tips()
self.buffer_widget.send_input_message("Jump to link: ", "jump_link")
def local_search_text(self):
if self.buffer_widget.is_local_search_text:
self.buffer_widget.delete_all_mark_local_search_text()
else:
self.buffer_widget.send_input_message("Search text: ", "local_search_text")
class PdfViewerWidget(QWidget):
translate_double_click_word = QtCore.pyqtSignal(str)
@ -157,6 +165,10 @@ class PdfViewerWidget(QWidget):
self.jump_link_key_cache_dict = {}
self.jump_link_annot_cache_dict = {}
# local search text
self.is_local_search_text = False
self.local_search_text_annot_cache_dict = {}
# Init scroll attributes.
self.scroll_step = 20
self.scroll_offset = 0
@ -217,6 +229,10 @@ class PdfViewerWidget(QWidget):
self.delete_all_mark_link()
page = self.document[index]
# follow page search text
if self.is_local_search_text:
page = self.add_mark_local_search_text(page, index)
trans = self.page_cache_trans if self.page_cache_trans is not None else fitz.Matrix(scale, scale)
pixmap = page.getPixmap(matrix=trans, alpha=False)
@ -511,6 +527,36 @@ class PdfViewerWidget(QWidget):
self.delete_all_mark_jump_link_tips()
self.update()
def add_mark_local_search_text(self, page, page_index):
quads_list = page.searchFor(self.search_text, hit_max=999, quads=True)
annot_list = []
if quads_list:
for quads in quads_list:
annot = page.addHighlightAnnot(quads)
annot.parent = page
annot_list.append(annot)
self.local_search_text_annot_cache_dict[page_index] = annot_list
return page
def local_search_text(self, search_text):
# begin local search
self.is_local_search_text = True
self.search_text = search_text
self.page_cache_pixmap_dict.clear()
self.update()
def delete_all_mark_local_search_text(self):
if self.local_search_text_annot_cache_dict:
for page_index in self.local_search_text_annot_cache_dict.keys():
page = self.document[page_index]
for annot in self.local_search_text_annot_cache_dict[page_index]:
page.deleteAnnot(annot)
self.is_local_search_text = False
self.search_text = None
self.local_search_text_annot_cache_dict.clear()
self.page_cache_pixmap_dict.clear()
self.update()
def jump_to_page(self, page_num):
self.update_scroll_offset(min(max(self.scale * (int(page_num) - 1) * self.page_height, 0), self.max_scroll_offset()))

@ -237,7 +237,8 @@ Try not to modify this alist directly. Use `eaf-setq' to modify instead."
("]" . "remember_jump")
("i" . "toggle_inverted_mode")
("m" . "toggle_mark_link")
("f" . "jump_to_link"))
("f" . "jump_to_link")
("s" . "local_search_text"))
"The keybinding of EAF PDF Viewer."
:type 'cons)

Loading…
Cancel
Save