32 #include "gnc-xml-helper.h"
35 #include "sixtp-utils.h"
36 #include "sixtp-parsers.h"
37 #include "sixtp-utils.h"
38 #include "sixtp-dom-parsers.h"
39 #include "sixtp-dom-generators.h"
42 #include "io-gncxml-gen.h"
46 #include "sixtp-dom-parsers.h"
50 const gchar *gnc_v2_book_version_string =
"2.0.0";
53 #define gnc_book_string "gnc:book"
54 #define book_id_string "book:id"
55 #define book_slots_string "book:slots"
61 #ifdef IMPLEMENT_BOOK_DOM_TREES_LATER
64 append_account_tree (xmlNodePtr parent,
66 gboolean allow_incompat)
68 GList *children, *node;
72 for (node = children; node; node = node->next)
78 accnode = gnc_account_dom_tree_create(account, FALSE, allow_incompat);
79 xmlAddChild (parent, accnode);
80 append_account_tree(accnode, account);
82 g_list_free(children);
89 xmlNodePtr parent = data;
91 node = gnc_transaction_dom_tree_create(txn);
92 xmlAddChild (parent, node);
101 gnc_book_dom_tree_create(
QofBook *book)
104 G_GNUC_UNUSED gboolean allow_incompat = TRUE;
106 ret = xmlNewNode(NULL, BAD_CAST gnc_book_string);
107 xmlSetProp(ret, BAD_CAST
"version", BAD_CAST gnc_v2_book_version_string);
109 xmlAddChild(ret, guid_to_dom_tree(book_id_string,
112 if (qof_instance_get_slots (QOF_INSTANCE (book)))
114 xmlNodePtr kvpnode = kvp_frame_to_dom_tree(book_slots_string,
115 qof_instance_get_slots (QOF_INSTANCE (book)));
117 xmlAddChild(ret, kvpnode);
120 #ifdef IMPLEMENT_BOOK_DOM_TREES_LATER
126 xmlAddChild(ret, gnc_commodity_dom_tree_create(
131 accnode = gnc_account_dom_tree_create(account, FALSE);
132 xmlAddChild (ret, rootAccNode);
134 append_account_tree (ret, gnc_book_get_root(book));
141 xmlAddChild(ret, gnc_schedXaction_dom_tree_create(
142 gnc_book_get_schedxactions(book)));
154 write_book_parts(FILE *out,
QofBook *book)
159 xmlElemDump(out, NULL, domnode);
160 xmlFreeNode (domnode);
162 if (ferror(out) || fprintf(out,
"\n") < 0)
165 if (qof_instance_get_slots (QOF_INSTANCE (book)))
167 xmlNodePtr kvpnode = kvp_frame_to_dom_tree(book_slots_string,
168 qof_instance_get_slots (QOF_INSTANCE (book)));
171 xmlElemDump(out, NULL, kvpnode);
172 xmlFreeNode(kvpnode);
174 if (ferror(out) || fprintf(out,
"\n") < 0)
186 book_id_handler(xmlNodePtr node, gpointer book_pdata)
191 guid = dom_tree_to_guid(node);
192 qof_instance_set_guid(QOF_INSTANCE(book), guid);
199 book_slots_handler (xmlNodePtr node, gpointer book_pdata)
206 success = dom_tree_to_kvp_frame_given (node, qof_instance_get_slots (QOF_INSTANCE (book)));
208 g_return_val_if_fail(success, FALSE);
216 { book_id_string, book_id_handler, 1, 0 },
217 { book_slots_string, book_slots_handler, 0, 0 },
222 gnc_book_end_handler(gpointer data_for_children,
223 GSList* data_from_children, GSList* sibling_data,
224 gpointer parent_data, gpointer global_data,
225 gpointer *result,
const gchar *tag)
227 xmlNodePtr tree = (xmlNodePtr)data_for_children;
229 QofBook *book = gdata->bookdata;
232 if (parent_data)
return TRUE;
236 if (!tag)
return TRUE;
238 g_return_val_if_fail(tree, FALSE);
240 book = dom_tree_to_book(tree, book);
242 gdata->cb(tag, gdata->parsedata, book);
250 gnc_book_id_end_handler(gpointer data_for_children,
251 GSList* data_from_children, GSList* sibling_data,
252 gpointer parent_data, gpointer global_data,
253 gpointer *result,
const gchar *tag)
256 xmlNodePtr tree = (xmlNodePtr)data_for_children;
258 QofBook *book = gdata->bookdata;
260 if (parent_data)
return TRUE;
261 if (!tag)
return TRUE;
263 g_return_val_if_fail(tree, FALSE);
265 successful = book_id_handler(tree, book);
272 gnc_book_slots_end_handler(gpointer data_for_children,
273 GSList* data_from_children, GSList* sibling_data,
274 gpointer parent_data, gpointer global_data,
275 gpointer *result,
const gchar *tag)
278 xmlNodePtr tree = (xmlNodePtr)data_for_children;
280 QofBook *book = gdata->bookdata;
282 if (parent_data)
return TRUE;
283 if (!tag)
return TRUE;
285 g_return_val_if_fail(tree, FALSE);
287 successful = book_slots_handler (tree, book);
294 dom_tree_to_book (xmlNodePtr node,
QofBook *book)
298 successful = dom_tree_generic_parse (node, book_handlers_v2,
302 PERR (
"failed to parse book");
310 gnc_book_sixtp_parser_create(
void)
312 return sixtp_dom_parser_new(gnc_book_end_handler, NULL, NULL);
316 gnc_book_id_sixtp_parser_create(
void)
318 return sixtp_dom_parser_new(gnc_book_id_end_handler, NULL, NULL);
322 gnc_book_slots_sixtp_parser_create(
void)
324 return sixtp_dom_parser_new(gnc_book_slots_end_handler, NULL, NULL);
int xaccAccountTreeForEachTransaction(Account *acc, TransactionCallback proc, void *data)
gnc_commodity_table * gnc_commodity_table_get_table(QofBook *book)
#define PERR(format, args...)
GNCPriceDB * gnc_pricedb_get_db(QofBook *book)
api for GnuCash version 2 XML-based file format
#define qof_book_get_guid(X)
GList * gnc_account_get_children(const Account *account)
gint qof_instance_guid_compare(const gconstpointer ptr1, const gconstpointer ptr2)
const gchar * QofLogModule