diff options
author | Davyd Madeley <davyd@madeley.id.au> | 2004-12-31 12:11:41 +0000 |
---|---|---|
committer | Davyd Madeley <davyd@src.gnome.org> | 2004-12-31 12:11:41 +0000 |
commit | 15a9315d04631786dee815113db26abcad28f7cd (patch) | |
tree | 83b8263f9c38c7819daf74674522630ebff6f3ff | |
parent | 593112940d8ad37bdbd34c3e9b65a8542cc08979 (diff) | |
download | yelp-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-- | ChangeLog | 7 | ||||
-rw-r--r-- | src/yelp-info-pager.c | 5 | ||||
-rw-r--r-- | src/yelp-info-parser.c | 71 | ||||
-rw-r--r-- | src/yelp-info-parser.h | 2 |
4 files changed, 84 insertions, 1 deletions
@@ -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__ */ |