+
+ return iface->get_info (document);
+}
+
+char *
+ev_document_get_text (EvDocument *document,
+ int page,
+ EvRectangle *rect)
+{
+ EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
+ char *retval;
+
+ LOG ("ev_document_get_text");
+ retval = iface->get_text (document, page, rect);
+
+ return retval;
+}
+
+gboolean
+ev_document_has_attachments (EvDocument *document)
+{
+ EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
+
+ if (iface->has_attachments == NULL)
+ return FALSE;
+
+ return iface->has_attachments (document);
+}
+
+GList *
+ev_document_get_attachments (EvDocument *document)
+{
+ EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
+ GList *retval;
+
+ LOG ("ev_document_get_attachments");
+ if (iface->get_attachments == NULL)
+ return NULL;
+ retval = iface->get_attachments (document);
+
+ return retval;
+}
+
+GdkPixbuf *
+ev_document_render_pixbuf (EvDocument *document,
+ EvRenderContext *rc)
+{
+ EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
+ GdkPixbuf *retval;
+
+ LOG ("ev_document_render_pixbuf");
+ g_assert (iface->render_pixbuf);
+
+ retval = iface->render_pixbuf (document, rc);
+
+ return retval;
+}
+
+void
+ev_document_info_free (EvDocumentInfo *info)
+{
+ if (info == NULL)
+ return;
+
+ g_free (info->title);
+ g_free (info->format);
+ g_free (info->author);
+ g_free (info->subject);
+ g_free (info->keywords);
+ g_free (info->security);
+
+ g_free (info);
+}
+
+
+/* Compares two rects. returns 0 if they're equal */
+#define EPSILON 0.0000001
+
+gint
+ev_rect_cmp (EvRectangle *a,
+ EvRectangle *b)
+{
+ if (a == b)
+ return 0;
+ if (a == NULL || b == NULL)
+ return 1;
+
+ return ! ((ABS (a->x1 - b->x1) < EPSILON) &&
+ (ABS (a->y1 - b->y1) < EPSILON) &&
+ (ABS (a->x2 - b->x2) < EPSILON) &&
+ (ABS (a->y2 - b->y2) < EPSILON));