[yelp] [libyelp/yelp-mallard-document] Support for Mallard Facets extension
- From: Shaun McCance <shaunm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [yelp] [libyelp/yelp-mallard-document] Support for Mallard Facets extension
- Date: Thu, 16 Dec 2010 21:55:22 +0000 (UTC)
commit 7e80e1250c0362bb88153e48f07af463d494eeda
Author: Shaun McCance <shaunm gnome org>
Date: Thu Dec 16 16:53:41 2010 -0500
[libyelp/yelp-mallard-document] Support for Mallard Facets extension
libyelp/yelp-mallard-document.c | 40 ++++++++++++++++++++++++++++++--------
1 files changed, 31 insertions(+), 9 deletions(-)
---
diff --git a/libyelp/yelp-mallard-document.c b/libyelp/yelp-mallard-document.c
index 307fde9..1bab124 100644
--- a/libyelp/yelp-mallard-document.c
+++ b/libyelp/yelp-mallard-document.c
@@ -39,6 +39,7 @@
#define STYLESHEET DATADIR"/yelp/xslt/mal2html.xsl"
#define MALLARD_NS "http://projectmallard.org/1.0/"
+#define MALLARD_FACET_NS "http://projectmallard.org/facet/1.0/"
typedef enum {
MALLARD_STATE_BLANK,
@@ -101,6 +102,10 @@ static void mallard_page_data_info (MallardPageData *page_data
static void mallard_page_data_run (MallardPageData *page_data);
static void mallard_page_data_free (MallardPageData *page_data);
+static gboolean xml_node_is_ns_name (xmlNodePtr node,
+ const xmlChar *ns,
+ const xmlChar *name);
+
G_DEFINE_TYPE (YelpMallardDocument, yelp_mallard_document, YELP_TYPE_DOCUMENT);
#define GET_PRIV(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), YELP_TYPE_MALLARD_DOCUMENT, YelpMallardDocumentPrivate))
@@ -468,7 +473,7 @@ mallard_page_data_walk (MallardPageData *page_data)
if (id == NULL)
goto done;
- ispage = xmlStrEqual (page_data->cur->name, BAD_CAST "page");
+ ispage = xml_node_is_ns_name (page_data->cur, MALLARD_NS, BAD_CAST "page");
if (ispage && g_hash_table_lookup (priv->pages_hash, id) != NULL)
goto done;
@@ -526,10 +531,10 @@ mallard_page_data_walk (MallardPageData *page_data)
for (child = page_data->cur->children; child; child = child->next) {
if (child->type != XML_ELEMENT_NODE)
continue;
- if (xmlStrEqual (child->name, BAD_CAST "info")) {
+ if (xml_node_is_ns_name (child, MALLARD_NS, BAD_CAST "info")) {
mallard_page_data_info (page_data, child, info);
}
- else if (xmlStrEqual (child->name, BAD_CAST "title")) {
+ else if (xml_node_is_ns_name (child, MALLARD_NS, BAD_CAST "title")) {
xmlNodePtr node;
xmlNodePtr title_node = xmlNewChild (page_data->cache,
priv->cache_ns,
@@ -564,7 +569,7 @@ mallard_page_data_walk (MallardPageData *page_data)
xmlXPathFreeObject (obj);
}
}
- else if (xmlStrEqual (child->name, BAD_CAST "section")) {
+ else if (xml_node_is_ns_name (child, MALLARD_NS, BAD_CAST "section")) {
oldcur = page_data->cur;
oldcache = page_data->cache;
page_data->cur = child;
@@ -591,10 +596,10 @@ mallard_page_data_info (MallardPageData *page_data,
gboolean editor_mode = yelp_settings_get_editor_mode (yelp_settings_get_default ());
for (child = info_node->children; child; child = child->next) {
- if (xmlStrEqual (child->name, BAD_CAST "info")) {
+ if (xml_node_is_ns_name (child, MALLARD_NS, BAD_CAST "info")) {
mallard_page_data_info (page_data, child, cache_node);
}
- else if (xmlStrEqual (child->name, BAD_CAST "title")) {
+ else if (xml_node_is_ns_name (child, MALLARD_NS, BAD_CAST "title")) {
xmlNodePtr node, title_node;
xmlChar *type, *role;
title_node = xmlCopyNode (child, 1);
@@ -617,7 +622,7 @@ mallard_page_data_info (MallardPageData *page_data,
xmlXPathFreeObject (obj);
}
}
- else if (xmlStrEqual (child->name, BAD_CAST "desc")) {
+ else if (xml_node_is_ns_name (child, MALLARD_NS, BAD_CAST "desc")) {
YelpMallardDocumentPrivate *priv = GET_PRIV (page_data->mallard);
xmlXPathObjectPtr obj;
page_data->xpath->node = child;
@@ -627,10 +632,15 @@ mallard_page_data_info (MallardPageData *page_data,
xmlAddChild (cache_node, xmlCopyNode (child, 1));
}
- else if (xmlStrEqual (child->name, BAD_CAST "link")) {
+ else if (xml_node_is_ns_name (child, MALLARD_NS, BAD_CAST "link")) {
+ xmlAddChild (cache_node, xmlCopyNode (child, 1));
+ }
+ else if (xml_node_is_ns_name (child, MALLARD_NS, BAD_CAST "revision")) {
xmlAddChild (cache_node, xmlCopyNode (child, 1));
}
- else if (xmlStrEqual (child->name, BAD_CAST "revision")) {
+ else if (xml_node_is_ns_name (child, MALLARD_FACET_NS, BAD_CAST "tag") ||
+ xml_node_is_ns_name (child, MALLARD_FACET_NS, BAD_CAST "match") ||
+ xml_node_is_ns_name (child, MALLARD_FACET_NS, BAD_CAST "choice") ) {
xmlAddChild (cache_node, xmlCopyNode (child, 1));
}
}
@@ -775,3 +785,15 @@ transform_error (YelpTransform *transform,
mallard_page_data_cancel (page_data);
}
+
+static gboolean
+xml_node_is_ns_name (xmlNodePtr node,
+ const xmlChar *ns,
+ const xmlChar *name)
+{
+ if (node->ns == NULL)
+ return (ns == NULL);
+ else if (ns != NULL && node->ns->href != NULL)
+ return (xmlStrEqual (ns, node->ns->href) && xmlStrEqual (name, node->name));
+ return FALSE;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]