X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=backend%2Fdjvu%2Fdjvu-links.c;h=e4d2791ce4ebb0083f8fbeabdc49b22af923ffee;hb=e769474337c9a6ffdaed2327056e8de2f7ca9ee4;hp=72d68f96b9bee595c5ca74a198d39345baab1ad3;hpb=19a00ed1cd086dcca4b6bfeb84e0b1488b2e3089;p=evince.git diff --git a/backend/djvu/djvu-links.c b/backend/djvu/djvu-links.c index 72d68f96..e4d2791c 100644 --- a/backend/djvu/djvu-links.c +++ b/backend/djvu/djvu-links.c @@ -26,7 +26,7 @@ #include "djvu-links.h" #include "djvu-document-private.h" #include "ev-document-links.h" -#include "ev-mapping.h" +#include "ev-mapping-list.h" static gboolean number_from_miniexp(miniexp_t sexp, int *number) { @@ -60,8 +60,8 @@ static gboolean number_from_string_10(const gchar *str, guint64 *number) } } -static EvLinkDest * -get_djvu_link_dest (const DjvuDocument *djvu_document, const gchar *link_name, int base_page) +static guint64 +get_djvu_link_page (const DjvuDocument *djvu_document, const gchar *link_name, int base_page) { guint64 page_num = 0; @@ -69,22 +69,28 @@ get_djvu_link_dest (const DjvuDocument *djvu_document, const gchar *link_name, i if (g_str_has_prefix (link_name, "#")) { if (base_page > 0 && g_str_has_prefix (link_name+1, "+")) { if (number_from_string_10 (link_name + 2, &page_num)) { - return ev_link_dest_new_page (base_page + page_num); + return base_page + page_num; } } else if (base_page > 0 && g_str_has_prefix (link_name+1, "-")) { if (number_from_string_10 (link_name + 2, &page_num)) { - return ev_link_dest_new_page (base_page - page_num); + return base_page - page_num; } } else { if (number_from_string_10 (link_name + 1, &page_num)) { - return ev_link_dest_new_page (page_num - 1); + return page_num - 1; } } } else { /* FIXME: component file identifiers */ } - return NULL; + return page_num; +} + +static EvLinkDest * +get_djvu_link_dest (const DjvuDocument *djvu_document, const gchar *link_name, int base_page) +{ + return ev_link_dest_new_page (get_djvu_link_page (djvu_document, link_name, base_page)); } static EvLinkAction * @@ -354,7 +360,7 @@ djvu_links_has_document_links (EvDocumentLinks *document_links) return FALSE; } -GList * +EvMappingList * djvu_links_get_links (EvDocumentLinks *document_links, gint page, double scale_factor) @@ -390,7 +396,7 @@ djvu_links_get_links (EvDocumentLinks *document_links, ddjvu_miniexp_release (djvu_document->d_document, page_annotations); } - return retval; + return ev_mapping_list_new (page, retval, (GDestroyNotify)g_object_unref); } EvLinkDest * @@ -409,6 +415,22 @@ djvu_links_find_link_dest (EvDocumentLinks *document_links, return ev_dest; } +gint +djvu_links_find_link_page (EvDocumentLinks *document_links, + const gchar *link_name) +{ + DjvuDocument *djvu_document = DJVU_DOCUMENT (document_links); + gint page; + + page = get_djvu_link_page (djvu_document, link_name, -1); + + if (page == -1) { + g_warning ("DjvuLibre error: unknown link destination %s", link_name); + } + + return page; +} + GtkTreeModel * djvu_links_get_links_model (EvDocumentLinks *document_links) {