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"
49const gchar* gnc_v2_book_version_string =
"2.0.0";
52#define gnc_book_string "gnc:book"
53#define book_id_string "book:id"
54#define book_slots_string "book:slots"
56static QofLogModule log_module = GNC_MOD_IO;
61gnc_book_dom_tree_create (
QofBook* book)
64 G_GNUC_UNUSED gboolean allow_incompat = TRUE;
66 ret = xmlNewNode (NULL, BAD_CAST gnc_book_string);
67 xmlSetProp (ret, BAD_CAST
"version", BAD_CAST gnc_v2_book_version_string);
69 xmlAddChild (ret, guid_to_dom_tree (book_id_string,
73 xmlAddChild (ret, qof_instance_slots_to_dom_tree (book_slots_string,
74 QOF_INSTANCE (book)));
84write_book_parts (FILE* out,
QofBook* book)
86 xmlNodePtr domnode, slotsnode;
89 xmlElemDump (out, NULL, domnode);
90 xmlFreeNode (domnode);
92 if (ferror (out) || fprintf (out,
"\n") < 0)
96 slotsnode = qof_instance_slots_to_dom_tree (book_slots_string,
100 xmlElemDump (out, NULL, slotsnode);
101 xmlFreeNode (slotsnode);
103 if (ferror (out) || fprintf (out,
"\n") < 0)
114book_id_handler (xmlNodePtr node, gpointer book_pdata)
116 QofBook* book =
static_cast<decltype (book)
> (book_pdata);
118 auto guid = dom_tree_to_guid (node);
119 qof_instance_set_guid (QOF_INSTANCE (book), &*guid);
125book_slots_handler (xmlNodePtr node, gpointer book_pdata)
127 QofBook* book =
static_cast<decltype (book)
> (book_pdata);
132 success = dom_tree_create_instance_slots (node, QOF_INSTANCE (book));
134 g_return_val_if_fail (success, FALSE);
142 { book_id_string, book_id_handler, 1, 0 },
143 { book_slots_string, book_slots_handler, 0, 0 },
148gnc_book_end_handler (gpointer data_for_children,
149 GSList* data_from_children, GSList* sibling_data,
150 gpointer parent_data, gpointer global_data,
151 gpointer* result,
const gchar* tag)
153 xmlNodePtr tree = (xmlNodePtr)data_for_children;
154 gxpf_data* gdata = (gxpf_data*)global_data;
155 QofBook* book =
static_cast<decltype (book)
> (gdata->bookdata);
158 if (parent_data)
return TRUE;
162 if (!tag)
return TRUE;
164 g_return_val_if_fail (tree, FALSE);
166 book = dom_tree_to_book (tree, book);
168 gdata->cb (tag, gdata->parsedata, book);
176gnc_book_id_end_handler (gpointer data_for_children,
177 GSList* data_from_children, GSList* sibling_data,
178 gpointer parent_data, gpointer global_data,
179 gpointer* result,
const gchar* tag)
182 xmlNodePtr tree = (xmlNodePtr)data_for_children;
183 gxpf_data* gdata = (gxpf_data*)global_data;
184 QofBook* book =
static_cast<decltype (book)
> (gdata->bookdata);
186 if (parent_data)
return TRUE;
187 if (!tag)
return TRUE;
189 g_return_val_if_fail (tree, FALSE);
191 successful = book_id_handler (tree, book);
198gnc_book_slots_end_handler (gpointer data_for_children,
199 GSList* data_from_children, GSList* sibling_data,
200 gpointer parent_data, gpointer global_data,
201 gpointer* result,
const gchar* tag)
204 xmlNodePtr tree = (xmlNodePtr)data_for_children;
205 gxpf_data* gdata = (gxpf_data*)global_data;
206 QofBook* book =
static_cast<decltype (book)
> (gdata->bookdata);
208 if (parent_data)
return TRUE;
209 if (!tag)
return TRUE;
211 g_return_val_if_fail (tree, FALSE);
213 successful = book_slots_handler (tree, book);
220dom_tree_to_book (xmlNodePtr node,
QofBook* book)
224 successful = dom_tree_generic_parse (node, book_handlers_v2,
228 PERR (
"failed to parse book");
236gnc_book_sixtp_parser_create (
void)
238 return sixtp_dom_parser_new (gnc_book_end_handler, NULL, NULL);
242gnc_book_id_sixtp_parser_create (
void)
244 return sixtp_dom_parser_new (gnc_book_id_end_handler, NULL, NULL);
248gnc_book_slots_sixtp_parser_create (
void)
250 return sixtp_dom_parser_new (gnc_book_slots_end_handler, NULL, NULL);
#define qof_book_get_guid(X)
deprecated
#define PERR(format, args...)
Log a serious error.
api for GnuCash version 2 XML-based file format