summaryrefslogtreecommitdiff
path: root/backend/djvu/djvu-document.c
diff options
context:
space:
mode:
Diffstat (limited to 'backend/djvu/djvu-document.c')
-rw-r--r--backend/djvu/djvu-document.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/backend/djvu/djvu-document.c b/backend/djvu/djvu-document.c
index 9ed327ad..7f1d54a3 100644
--- a/backend/djvu/djvu-document.c
+++ b/backend/djvu/djvu-document.c
@@ -31,6 +31,7 @@
#include "ev-document-links.h"
#include "ev-selection.h"
#include "ev-file-helpers.h"
+#include "ev-document-text.h"
#include <glib.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
@@ -56,6 +57,7 @@ static void djvu_document_file_exporter_iface_init (EvFileExporterInterface *ifa
static void djvu_document_find_iface_init (EvDocumentFindInterface *iface);
static void djvu_document_document_links_iface_init (EvDocumentLinksInterface *iface);
static void djvu_selection_iface_init (EvSelectionInterface *iface);
+static void djvu_document_text_iface_init (EvDocumentTextInterface *iface);
EV_BACKEND_REGISTER_WITH_CODE (DjvuDocument, djvu_document,
{
@@ -64,6 +66,7 @@ EV_BACKEND_REGISTER_WITH_CODE (DjvuDocument, djvu_document,
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_FIND, djvu_document_find_iface_init);
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_LINKS, djvu_document_document_links_iface_init);
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_SELECTION, djvu_selection_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_TEXT, djvu_document_text_iface_init);
});
#define EV_DJVU_ERROR ev_djvu_error_quark ()
@@ -471,6 +474,37 @@ djvu_selection_iface_init (EvSelectionInterface *iface)
iface->get_selected_text = djvu_selection_get_selected_text;
}
+static gchar *
+djvu_document_text_get_text (EvDocumentText *selection,
+ EvPage *page)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (selection);
+ miniexp_t page_text;
+ gchar *text = NULL;
+
+ while ((page_text = ddjvu_document_get_pagetext (djvu_document->d_document,
+ page->index,
+ "char")) == miniexp_dummy)
+ djvu_handle_events (djvu_document, TRUE, NULL);
+
+ if (page_text != miniexp_nil) {
+ DjvuTextPage *tpage = djvu_text_page_new (page_text);
+
+ djvu_text_page_prepare_search (tpage, TRUE);
+ text = tpage->text;
+ tpage->text = NULL;
+ djvu_text_page_free (tpage);
+ ddjvu_miniexp_release (djvu_document->d_document, page_text);
+ }
+ return text;
+}
+
+static void
+djvu_document_text_iface_init (EvDocumentTextInterface *iface)
+{
+ iface->get_text = djvu_document_text_get_text;
+}
+
static void
djvu_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
EvRenderContext *rc,