static guint64 get_djvu_link_page (const DjvuDocument *djvu_document, const gchar *link_name, int base_page) { guint64 page_num = 0; /* #pagenum, #+pageoffset, #-pageoffset */ if (g_str_has_prefix (link_name, "#")) { if (g_str_has_suffix (link_name,".djvu")) { /* File identifiers */ gpointer page = NULL; if (g_hash_table_lookup_extended (djvu_document->file_ids, link_name + 1, NULL, &page)) { return GPOINTER_TO_INT (page); } } else if (base_page > 0 && g_str_has_prefix (link_name + 1, "+")) { if (number_from_string_10 (link_name + 2, &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 base_page - page_num; } } else { if (number_from_string_10 (link_name + 1, &page_num)) { return page_num - 1; } } } else { /* FIXME: should we handle this case */ } return page_num; }
static guint64 get_djvu_link_page (const DjvuDocument *djvu_document, const gchar *link_name, int base_page) { guint64 page_num = 0; /* #pagenum, #+pageoffset, #-pageoffset */ 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 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 base_page - page_num; } } else { if (number_from_string_10 (link_name + 1, &page_num)) { return page_num - 1; } } } else { /* FIXME: component file identifiers */ } return page_num; }