summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavyd Madeley <davyd@madeley.id.au>2004-12-31 12:11:41 +0000
committerDavyd Madeley <davyd@src.gnome.org>2004-12-31 12:11:41 +0000
commit15a9315d04631786dee815113db26abcad28f7cd (patch)
tree83b8263f9c38c7819daf74674522630ebff6f3ff
parent593112940d8ad37bdbd34c3e9b65a8542cc08979 (diff)
downloadyelp-15a9315d04631786dee815113db26abcad28f7cd.tar.gz
Generate simple XML for GNU Info support. No markup yet.
2004-12-31 Davyd Madeley <davyd@madeley.id.au> * src/yelp-info-pager.c: * src/yelp-info-parser.c: * src/yelp-info-parser.h: Generate simple XML for GNU Info support. No markup yet.
-rw-r--r--ChangeLog7
-rw-r--r--src/yelp-info-pager.c5
-rw-r--r--src/yelp-info-parser.c71
-rw-r--r--src/yelp-info-parser.h2
4 files changed, 84 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 098df69f..068798d8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2004-12-31 Davyd Madeley <davyd@madeley.id.au>
+
+ * src/yelp-info-pager.c:
+ * src/yelp-info-parser.c:
+ * src/yelp-info-parser.h: Generate simple XML for GNU Info support. No
+ markup yet.
+
2004-12-31 Shaun McCance <shaunm@gnome.org>
* stylesheets/info2html.xsl:
diff --git a/src/yelp-info-pager.c b/src/yelp-info-pager.c
index 55328b40..3ee48ac9 100644
--- a/src/yelp-info-pager.c
+++ b/src/yelp-info-pager.c
@@ -145,6 +145,7 @@ info_pager_parse (YelpPager *pager)
YelpDocInfo *doc_info;
gchar *filename;
xmlDocPtr doc;
+ xmlNodePtr node;
GError *error;
GtkTreeStore *tree;
@@ -156,8 +157,12 @@ info_pager_parse (YelpPager *pager)
g_object_ref (pager);
/* DO STUFF HERE */
+ /* parse into a GtkTreeStore */
tree = yelp_info_parser_parse_file (filename);
+ /* create the XML file */
+ doc = yelp_info_parser_parse_tree (tree);
+
g_object_unref (pager);
return doc;
diff --git a/src/yelp-info-parser.c b/src/yelp-info-parser.c
index ba20b687..bd5b2599 100644
--- a/src/yelp-info-parser.c
+++ b/src/yelp-info-parser.c
@@ -10,6 +10,8 @@
#include "yelp-info-parser.h"
#include "yelp-utils.h"
+/* Part 1: Parse File Into Tree Store */
+
enum
{
PAGE_TAG_TABLE,
@@ -202,6 +204,7 @@ process_page (GtkTreeStore *tree, GHashTable *nodes2offsets,
g_hash_table_insert (nodes2iters, g_strdup (node), iter);
g_print ("size: %i\n", g_hash_table_size (nodes2iters));
gtk_tree_store_set (tree, iter,
+ COLUMN_PAGE_NO, g_strdup (node),
COLUMN_PAGE_NAME, g_strdup (node),
COLUMN_PAGE_CONTENT, g_strdup (parts[2]),
-1);
@@ -273,7 +276,7 @@ GtkTreeStore
* rather then consolidating these into one dictionary, we'll just
* chain our lookups */
processed_table = g_malloc0 (pages * sizeof (int));
- tree = gtk_tree_store_new (N_COLUMNS, G_TYPE_INT, G_TYPE_STRING,
+ tree = gtk_tree_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING,
G_TYPE_STRING);
nodes2iters = g_hash_table_new (g_str_hash, g_str_equal);
@@ -294,3 +297,69 @@ GtkTreeStore
return tree;
}
+
+/* End Part 1 */
+/* Part 2: Parse Tree into XML */
+static void
+parse_tree_level (GtkTreeStore *tree, xmlNodePtr *node, GtkTreeIter iter)
+{
+ GtkTreeIter children;
+ xmlNodePtr newnode;
+
+ char *page_no;
+ char *page_name;
+ char *page_content;
+
+ g_print ("Decended\n");
+ do
+ {
+ gtk_tree_model_get (GTK_TREE_MODEL (tree), &iter,
+ COLUMN_PAGE_NO, &page_no,
+ COLUMN_PAGE_NAME, &page_name,
+ COLUMN_PAGE_CONTENT, &page_content,
+ -1);
+ g_print ("Got Section: %s\n", page_name);
+ newnode = xmlNewTextChild (*node, NULL,
+ BAD_CAST "Section",
+ page_content);
+ xmlNewProp (newnode, "id", g_strdup (page_no));
+ xmlNewProp (newnode, "name", g_strdup (page_name));
+ if (gtk_tree_model_iter_children (GTK_TREE_MODEL (tree),
+ &children,
+ &iter))
+ parse_tree_level (tree, &newnode, children);
+ }
+ while (gtk_tree_model_iter_next (GTK_TREE_MODEL (tree), &iter));
+ g_print ("Ascending\n");
+}
+
+xmlDocPtr
+yelp_info_parser_parse_tree (GtkTreeStore *tree)
+{
+ xmlDocPtr doc;
+ xmlNodePtr node;
+ GtkTreeIter iter;
+
+ xmlChar *xmlbuf;
+ int bufsiz;
+
+ doc = xmlNewDoc ("1.0");
+ node = xmlNewNode (NULL, BAD_CAST "Info");
+ xmlDocSetRootElement (doc, node);
+
+ /* functions I will want:
+ gtk_tree_model_get_iter_first;
+ gtk_tree_model_iter_next;
+ gtk_tree_model_iter_children;
+ */
+
+ if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (tree), &iter))
+ parse_tree_level (tree, &node, iter);
+ else
+ g_print ("Empty tree?\n");
+
+ xmlDocDumpFormatMemory (doc, &xmlbuf, &bufsiz, 1);
+ g_print ("XML follows:\n%s\n", xmlbuf);
+
+ return doc;
+}
diff --git a/src/yelp-info-parser.h b/src/yelp-info-parser.h
index b7ce7211..23eb71a0 100644
--- a/src/yelp-info-parser.h
+++ b/src/yelp-info-parser.h
@@ -24,10 +24,12 @@
#define __YELP_INFO_PARSER_H__
#include <glib.h>
+#include <gtk/gtk.h>
#include <libxml/tree.h>
#include "yelp-utils.h"
GtkTreeStore *yelp_info_parser_parse_file (char *file);
+xmlDocPtr yelp_info_parser_parse_tree (GtkTreeStore *tree);
#endif /* __YELP_INFO_PARSER_H__ */