Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37712533
en ru br
Репозитории ALT

Группа :: Graphical desktop/MATE
Пакет: mate-document-viewer

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: atril_djvu-fix-case-sensitive-search.patch
Скачать


From ec3b83d34ffeaf2c0d16ba013fcba64f17fab203 Mon Sep 17 00:00:00 2001
From: Stefano Karapetsas <stefano@karapetsas.com>
Date: Wed, 19 Mar 2014 09:17:58 +0000
Subject: djvu: Fix case sensitive search
Closes https://github.com/mate-desktop/atril/issues/41
Closes https://github.com/mate-desktop/atril/pull/74
This commit is based on Aleksi Blinnikka one from #74
---
diff --git a/backend/djvu/djvu-document.c b/backend/djvu/djvu-document.c
index 814503c..bddcef5 100644
--- a/backend/djvu/djvu-document.c
+++ b/backend/djvu/djvu-document.c
@@ -654,7 +654,7 @@ djvu_document_find_find_text (EvDocumentFind   *document,
 		
 		djvu_text_page_prepare_search (tpage, case_sensitive);
 		if (tpage->links->len > 0) {
-			djvu_text_page_search (tpage, text);
+			djvu_text_page_search (tpage, text, case_sensitive);
 			matches = tpage->results;
 		}
 		djvu_text_page_free (tpage);
diff --git a/backend/djvu/djvu-text-page.c b/backend/djvu/djvu-text-page.c
index 3f171d1..d74a398 100644
--- a/backend/djvu/djvu-text-page.c
+++ b/backend/djvu/djvu-text-page.c
@@ -365,22 +365,31 @@ djvu_text_page_append_text (DjvuTextPage *page,
  * djvu_text_page_search:
  * @page: #DjvuTextPage instance
  * @text: text to search
+ * @case_sensitive: do not ignore case
  * 
  * Searches the page for the given text. The results list has to be 
  * externally freed afterwards.
  */
 void 
 djvu_text_page_search (DjvuTextPage *page, 
-		       const char   *text)
+		       const char   *text,
+		       gboolean      case_sensitive)
 {
 	char *haystack = page->text;
+	char *search_text;
 	int search_len;
 	EvRectangle *result;
 	if (page->links->len == 0)
 		return;
 
 	search_len = strlen (text);
-	while ((haystack = strstr (haystack, text)) != NULL) {
+
+	if (case_sensitive)
+		search_text = g_strdup (text);
+	else
+		search_text = g_utf8_casefold (text, search_len);
+
+	while ((haystack = strstr (haystack, search_text)) != NULL) {
 		int start_p = haystack - page->text;
 		miniexp_t start = djvu_text_page_position (page, start_p);
 		int end_p = start_p + search_len - 1;
@@ -391,6 +400,8 @@ djvu_text_page_search (DjvuTextPage *page,
 		haystack = haystack + search_len;
 	}
 	page->results = g_list_reverse (page->results);
+
+	g_free (search_text);
 }
 
 
diff --git a/backend/djvu/djvu-text-page.h b/backend/djvu/djvu-text-page.h
index 6e16f25..5ee85a3 100644
--- a/backend/djvu/djvu-text-page.h
+++ b/backend/djvu/djvu-text-page.h
@@ -51,7 +51,8 @@ char *			djvu_text_page_copy 		(DjvuTextPage *page,
 void			djvu_text_page_prepare_search	(DjvuTextPage *page,
 	       		    				 gboolean      case_sensitive);
 void 			djvu_text_page_search 		(DjvuTextPage *page, 
-		    					const char    *text);
+		    					 const char    *text,
+							 gboolean       case_sensitive);
 DjvuTextPage*		djvu_text_page_new 		(miniexp_t     text);
 void 			djvu_text_page_free 		(DjvuTextPage *page);
 
--
cgit 
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin