diff options
Diffstat (limited to 'backend/pdf/ev-poppler.cc')
-rw-r--r-- | backend/pdf/ev-poppler.cc | 53 |
1 files changed, 53 insertions, 0 deletions
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 */ |