summaryrefslogtreecommitdiff
path: root/libyelp/yelp-document.c
diff options
context:
space:
mode:
authorShaun McCance <shaunm@gnome.org>2010-06-01 15:01:57 -0500
committerShaun McCance <shaunm@gnome.org>2010-06-01 15:02:42 -0500
commit78dbed19c11400d1f9b182acc01a7414dadd191f (patch)
treef65a7e470ef1843598d68bcb0ca5466480cdd515 /libyelp/yelp-document.c
parent6d2f282102a2992c6197b60feed41d6a73272400 (diff)
downloadyelp-78dbed19c11400d1f9b182acc01a7414dadd191f.tar.gz
[libyelp] Adding man page support, some formatting still off
Diffstat (limited to 'libyelp/yelp-document.c')
-rw-r--r--libyelp/yelp-document.c70
1 files changed, 43 insertions, 27 deletions
diff --git a/libyelp/yelp-document.c b/libyelp/yelp-document.c
index 45017775..1a1cbb65 100644
--- a/libyelp/yelp-document.c
+++ b/libyelp/yelp-document.c
@@ -30,9 +30,10 @@
#include "yelp-debug.h"
#include "yelp-document.h"
#include "yelp-error.h"
-#include "yelp-info-document.h"
#include "yelp-docbook-document.h"
+#include "yelp-info-document.h"
#include "yelp-mallard-document.h"
+#include "yelp-man-document.h"
#include "yelp-simple-document.h"
typedef struct _Request Request;
@@ -76,6 +77,8 @@ struct _YelpDocumentPriv {
Hash *prev_ids; /* Mapping of page IDs to "previous page" IDs */
Hash *next_ids; /* Mapping of page IDs to "next page" IDs */
Hash *up_ids; /* Mapping of page IDs to "up page" IDs */
+
+ GError *idle_error;
};
G_DEFINE_TYPE (YelpDocument, yelp_document, G_TYPE_OBJECT);
@@ -140,14 +143,14 @@ yelp_document_get_for_uri (YelpUri *uri)
YelpDocument *document = NULL;
if (documents == NULL)
- documents = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, g_object_unref);
+ documents = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, g_object_unref);
g_return_val_if_fail (yelp_uri_is_resolved (uri), NULL);
docuri = yelp_uri_get_document_uri (uri);
if (docuri == NULL)
- return NULL;
+ return NULL;
switch (yelp_uri_get_document_type (uri)) {
case YELP_URI_DOCUMENT_TYPE_TEXT:
@@ -170,38 +173,38 @@ yelp_document_get_for_uri (YelpUri *uri)
document = g_hash_table_lookup (documents, docuri);
if (document != NULL) {
- g_free (docuri);
- return g_object_ref (document);
+ g_free (docuri);
+ return g_object_ref (document);
}
switch (yelp_uri_get_document_type (uri)) {
case YELP_URI_DOCUMENT_TYPE_TEXT:
case YELP_URI_DOCUMENT_TYPE_HTML:
case YELP_URI_DOCUMENT_TYPE_XHTML:
- document = yelp_simple_document_new (uri);
- break;
+ document = yelp_simple_document_new (uri);
+ break;
case YELP_URI_DOCUMENT_TYPE_DOCBOOK:
- document = yelp_docbook_document_new (uri);
- break;
+ document = yelp_docbook_document_new (uri);
+ break;
case YELP_URI_DOCUMENT_TYPE_MALLARD:
- document = yelp_mallard_document_new (uri);
- break;
+ document = yelp_mallard_document_new (uri);
+ break;
case YELP_URI_DOCUMENT_TYPE_MAN:
- /* FIXME */
- break;
+ document = yelp_man_document_new (uri);
+ break;
case YELP_URI_DOCUMENT_TYPE_INFO:
- document = yelp_info_document_new (uri);
- break;
+ document = yelp_info_document_new (uri);
+ break;
case YELP_URI_DOCUMENT_TYPE_TOC:
- /* FIXME */
- break;
+ /* FIXME */
+ break;
case YELP_URI_DOCUMENT_TYPE_SEARCH:
- /* FIXME */
- break;
+ /* FIXME */
+ break;
case YELP_URI_DOCUMENT_TYPE_NOT_FOUND:
case YELP_URI_DOCUMENT_TYPE_EXTERNAL:
case YELP_URI_DOCUMENT_TYPE_ERROR:
- break;
+ break;
}
if (document != NULL) {
@@ -847,22 +850,19 @@ yelp_document_signal (YelpDocument *document,
g_mutex_unlock (document->priv->mutex);
}
-void
-yelp_document_error_pending (YelpDocument *document,
- const GError *error)
+static gboolean
+yelp_document_error_pending_idle (YelpDocument *document)
{
YelpDocumentPriv *priv = GET_PRIV (document);
GSList *cur;
Request *request;
- g_assert (document != NULL && YELP_IS_DOCUMENT (document));
-
g_mutex_lock (priv->mutex);
if (priv->reqs_pending) {
for (cur = priv->reqs_pending; cur; cur = cur->next) {
request = cur->data;
- request->error = yelp_error_copy ((GError *) error);
+ request->error = yelp_error_copy ((GError *) priv->idle_error);
request->idle_funcs++;
g_idle_add ((GSourceFunc) request_idle_error, request);
}
@@ -872,6 +872,22 @@ yelp_document_error_pending (YelpDocument *document,
}
g_mutex_unlock (priv->mutex);
+
+ g_object_unref (document);
+ return FALSE;
+}
+
+void
+yelp_document_error_pending (YelpDocument *document,
+ const GError *error)
+{
+ YelpDocumentPriv *priv = GET_PRIV (document);
+
+ g_assert (document != NULL && YELP_IS_DOCUMENT (document));
+
+ g_object_ref (document);
+ priv->idle_error = g_error_copy (error);
+ g_idle_add ((GSourceFunc) yelp_document_error_pending_idle, document);
}
/******************************************************************************/