jobject djvu_links_get_links(JNIEnv *jenv, ddjvu_document_t* djvu_document, int page) { DEBUG("djvu_links_get_links %d", page); miniexp_t page_annotations = miniexp_nil; miniexp_t *hyperlinks = NULL, *iter = NULL; ddjvu_pageinfo_t page_info; jobject arrayList = NULL; page_annotations = ddjvu_document_get_pageanno(djvu_document, page); ddjvu_document_get_pageinfo(djvu_document, page, &page_info); if (page_annotations) { hyperlinks = ddjvu_anno_get_hyperlinks(page_annotations); if (hyperlinks) { jclass arrayListClass = jenv->FindClass("java/util/ArrayList"); if (!arrayListClass) return arrayList; jmethodID alInitMethodId = jenv->GetMethodID(arrayListClass, "<init>", "()V"); if (!alInitMethodId) return arrayList; jmethodID alAddMethodId = jenv->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z"); if (!alAddMethodId) return arrayList; arrayList = jenv->NewObject(arrayListClass, alInitMethodId); if (!arrayList) return arrayList; for (iter = hyperlinks; *iter; ++iter) { jobject hl = get_djvu_hyperlink_mapping(jenv, djvu_document, &page_info, *iter); if (hl) jenv->CallBooleanMethod(arrayList, alAddMethodId, hl); //jenv->DeleteLocalRef(hl); } free(hyperlinks); } ddjvu_miniexp_release(djvu_document, page_annotations); } return arrayList; }
EvMappingList * djvu_links_get_links (EvDocumentLinks *document_links, gint page, double scale_factor) { DjvuDocument *djvu_document = DJVU_DOCUMENT (document_links); GList *retval = NULL; miniexp_t page_annotations = miniexp_nil; miniexp_t *hyperlinks = NULL, *iter = NULL; EvMapping *ev_link_mapping; ddjvu_pageinfo_t page_info; while ((page_annotations = ddjvu_document_get_pageanno (djvu_document->d_document, page)) == miniexp_dummy) djvu_handle_events (djvu_document, TRUE, NULL); while (ddjvu_document_get_pageinfo (djvu_document->d_document, page, &page_info) < DDJVU_JOB_OK) djvu_handle_events(djvu_document, TRUE, NULL); if (page_annotations) { hyperlinks = ddjvu_anno_get_hyperlinks (page_annotations); if (hyperlinks) { for (iter = hyperlinks; *iter; ++iter) { ev_link_mapping = get_djvu_hyperlink_mapping (djvu_document, page, &page_info, *iter); if (ev_link_mapping) { ev_link_mapping->area.x1 *= scale_factor; ev_link_mapping->area.x2 *= scale_factor; ev_link_mapping->area.y1 *= scale_factor; ev_link_mapping->area.y2 *= scale_factor; retval = g_list_prepend (retval, ev_link_mapping); } } free (hyperlinks); } ddjvu_miniexp_release (djvu_document->d_document, page_annotations); } return ev_mapping_list_new (page, retval, (GDestroyNotify)g_object_unref); }