From f2a0613eaeddc32f0393044ce06bc1709de44842 Mon Sep 17 00:00:00 2001 From: Antia Puentes Date: Wed, 10 Jul 2013 17:50:18 +0200 Subject: pdf: Implement ev_document_text_get_text_attrs() origin commit: https://git.gnome.org/browse/evince/commit/?h=gnome-3-10&id=96b9a1 --- backend/pdf/ev-poppler.cc | 53 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'backend/pdf/ev-poppler.cc') diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc index 20cd8e75..e9bb9a4c 100644 --- a/backend/pdf/ev-poppler.cc +++ b/backend/pdf/ev-poppler.cc @@ -2033,12 +2033,65 @@ pdf_document_text_get_text_layout (EvDocumentText *selection, (PopplerRectangle **)areas, n_areas); } +static PangoAttrList * +pdf_document_text_get_text_attrs (EvDocumentText *document_text, + EvPage *page) +{ + GList *backend_attrs_list, *l; + PangoAttrList *attrs_list; + + g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL); + + backend_attrs_list = poppler_page_get_text_attributes (POPPLER_PAGE (page->backend_page)); + if (!backend_attrs_list) + return NULL; + + attrs_list = pango_attr_list_new (); + for (l = backend_attrs_list; l; l = g_list_next (l)) { + PopplerTextAttributes *backend_attrs = (PopplerTextAttributes *)l->data; + PangoAttribute *attr; + + if (backend_attrs->is_underlined) { + attr = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE); + attr->start_index = backend_attrs->start_index; + attr->end_index = backend_attrs->end_index; + pango_attr_list_insert (attrs_list, attr); + } + + attr = pango_attr_foreground_new (backend_attrs->color.red, + backend_attrs->color.green, + backend_attrs->color.blue); + attr->start_index = backend_attrs->start_index; + attr->end_index = backend_attrs->end_index; + pango_attr_list_insert (attrs_list, attr); + + if (backend_attrs->font_name) { + attr = pango_attr_family_new (backend_attrs->font_name); + attr->start_index = backend_attrs->start_index; + attr->end_index = backend_attrs->end_index; + pango_attr_list_insert (attrs_list, attr); + } + + if (backend_attrs->font_size) { + attr = pango_attr_size_new (backend_attrs->font_size * PANGO_SCALE); + attr->start_index = backend_attrs->start_index; + attr->end_index = backend_attrs->end_index; + pango_attr_list_insert (attrs_list, attr); + } + } + + poppler_page_free_text_attributes (backend_attrs_list); + + return attrs_list; +} + static void pdf_document_text_iface_init (EvDocumentTextInterface *iface) { iface->get_text_mapping = pdf_document_text_get_text_mapping; iface->get_text = pdf_document_text_get_text; iface->get_text_layout = pdf_document_text_get_text_layout; + iface->get_text_attrs = pdf_document_text_get_text_attrs; } /* Page Transitions */ -- cgit v1.2.1