[yelp] Fix some issues with previous/next links
- From: Shaun McCance <shaunm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [yelp] Fix some issues with previous/next links
- Date: Fri, 7 Jan 2011 00:50:44 +0000 (UTC)
commit 5ca0a22c2d24a1ab9245e6dc13b694cc2c1e0d48
Author: Shaun McCance <shaunm gnome org>
Date: Thu Jan 6 19:48:10 2011 -0500
Fix some issues with previous/next links
libyelp/yelp-docbook-document.c | 7 ----
libyelp/yelp-mallard-document.c | 60 +++++++++++++++++++++++++++++---------
2 files changed, 46 insertions(+), 21 deletions(-)
---
diff --git a/libyelp/yelp-docbook-document.c b/libyelp/yelp-docbook-document.c
index 00d4cde..7dcf917 100644
--- a/libyelp/yelp-docbook-document.c
+++ b/libyelp/yelp-docbook-document.c
@@ -197,8 +197,6 @@ yelp_docbook_document_new (YelpUri *uri)
priv->uri = g_object_ref (uri);
- yelp_document_set_page_id (YELP_DOCUMENT (docbook), "//about", "//about");
-
priv->sections =
GTK_TREE_MODEL (gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_STRING));
@@ -359,14 +357,10 @@ docbook_process (YelpDocbookDocument *docbook)
priv->root_id = g_strdup (id);
yelp_document_set_page_id (document, NULL, (gchar *) id);
yelp_document_set_page_id (document, "//index", (gchar *) id);
- yelp_document_set_prev_id (document, (gchar *) id, "//about");
- yelp_document_set_next_id (document, "//about", (gchar *) id);
}
else {
priv->root_id = g_strdup ("//index");
yelp_document_set_page_id (document, NULL, "//index");
- yelp_document_set_prev_id (document, "//index", "//about");
- yelp_document_set_next_id (document, "//about", "//index");
/* add the id attribute to the root element with value "index"
* so when we try to load the document later, it doesn't fail */
if (priv->xmlcur->ns)
@@ -377,7 +371,6 @@ docbook_process (YelpDocbookDocument *docbook)
xmlNewProp (priv->xmlcur, BAD_CAST "id", BAD_CAST "//index");
}
yelp_document_set_root_id (document, priv->root_id, priv->root_id);
- yelp_document_set_root_id (document, "//about", priv->root_id);
g_mutex_unlock (priv->mutex);
g_mutex_lock (priv->mutex);
diff --git a/libyelp/yelp-mallard-document.c b/libyelp/yelp-mallard-document.c
index 1bab124..8f81e46 100644
--- a/libyelp/yelp-mallard-document.c
+++ b/libyelp/yelp-mallard-document.c
@@ -69,6 +69,7 @@ typedef struct {
gchar *page_title;
gchar *page_desc;
+ gchar *next_page;
} MallardPageData;
static void yelp_mallard_document_class_init (YelpMallardDocumentClass *klass);
@@ -348,6 +349,14 @@ mallard_think (YelpMallardDocument *mallard)
yelp_document_set_page_desc ((YelpDocument *) mallard,
page_data->page_id,
page_data->page_desc);
+ if (page_data->next_page != NULL) {
+ yelp_document_set_next_id ((YelpDocument *) mallard,
+ page_data->page_id,
+ page_data->next_page);
+ yelp_document_set_prev_id ((YelpDocument *) mallard,
+ page_data->next_page,
+ page_data->page_id);
+ }
yelp_document_signal ((YelpDocument *) mallard,
page_data->page_id,
YELP_DOCUMENT_SIGNAL_INFO,
@@ -606,20 +615,25 @@ mallard_page_data_info (MallardPageData *page_data,
xmlAddChild (cache_node, title_node);
type = xmlGetProp (child, BAD_CAST "type");
- role = xmlGetProp (child, BAD_CAST "role");
-
- if (xmlStrEqual (type, BAD_CAST "link") && role == NULL)
- page_data->link_title = TRUE;
- if (xmlStrEqual (type, BAD_CAST "sort"))
- page_data->sort_title = TRUE;
- if (xmlStrEqual (type, BAD_CAST "text")) {
- YelpMallardDocumentPrivate *priv = GET_PRIV (page_data->mallard);
- xmlXPathObjectPtr obj;
- page_data->xpath->node = child;
- obj = xmlXPathCompiledEval (priv->normalize, page_data->xpath);
- g_free (page_data->page_title);
- page_data->page_title = g_strdup (obj->stringval);
- xmlXPathFreeObject (obj);
+
+ if (type != NULL) {
+ role = xmlGetProp (child, BAD_CAST "role");
+ if (xmlStrEqual (type, BAD_CAST "link") && role == NULL)
+ page_data->link_title = TRUE;
+ if (xmlStrEqual (type, BAD_CAST "sort"))
+ page_data->sort_title = TRUE;
+ if (xmlStrEqual (type, BAD_CAST "text")) {
+ YelpMallardDocumentPrivate *priv = GET_PRIV (page_data->mallard);
+ xmlXPathObjectPtr obj;
+ page_data->xpath->node = child;
+ obj = xmlXPathCompiledEval (priv->normalize, page_data->xpath);
+ g_free (page_data->page_title);
+ page_data->page_title = g_strdup (obj->stringval);
+ xmlXPathFreeObject (obj);
+ }
+ if (role != NULL)
+ xmlFree (role);
+ xmlFree (type);
}
}
else if (xml_node_is_ns_name (child, MALLARD_NS, BAD_CAST "desc")) {
@@ -633,7 +647,24 @@ mallard_page_data_info (MallardPageData *page_data,
xmlAddChild (cache_node, xmlCopyNode (child, 1));
}
else if (xml_node_is_ns_name (child, MALLARD_NS, BAD_CAST "link")) {
+ xmlChar *type, *next;
+
xmlAddChild (cache_node, xmlCopyNode (child, 1));
+
+ type = xmlGetProp (child, BAD_CAST "type");
+ if (type != NULL) {
+ if (xmlStrEqual (type, "next")) {
+ next = xmlGetProp (child, BAD_CAST "xref");
+ if (next != NULL) {
+ if (page_data->next_page != NULL)
+ g_free (page_data->next_page);
+ page_data->next_page = g_strdup (next);
+ xmlFree (next);
+ }
+ }
+ xmlFree (type);
+ }
+
}
else if (xml_node_is_ns_name (child, MALLARD_NS, BAD_CAST "revision")) {
xmlAddChild (cache_node, xmlCopyNode (child, 1));
@@ -698,6 +729,7 @@ mallard_page_data_free (MallardPageData *page_data)
xmlXPathFreeContext (page_data->xpath);
g_free (page_data->page_title);
g_free (page_data->page_desc);
+ g_free (page_data->next_page);
g_free (page_data);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]