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" 49 const 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" 56 static QofLogModule log_module = GNC_MOD_IO;
61 gnc_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)));
84 write_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)
114 book_id_handler (xmlNodePtr node, gpointer book_pdata)
116 QofBook* book =
static_cast<decltype (book)
> (book_pdata);
119 guid = dom_tree_to_guid (node);
120 qof_instance_set_guid (QOF_INSTANCE (book), guid);
127 book_slots_handler (xmlNodePtr node, gpointer book_pdata)
129 QofBook* book =
static_cast<decltype (book)
> (book_pdata);
134 success = dom_tree_create_instance_slots (node, QOF_INSTANCE (book));
136 g_return_val_if_fail (success, FALSE);
144 { book_id_string, book_id_handler, 1, 0 },
145 { book_slots_string, book_slots_handler, 0, 0 },
150 gnc_book_end_handler (gpointer data_for_children,
151 GSList* data_from_children, GSList* sibling_data,
152 gpointer parent_data, gpointer global_data,
153 gpointer* result,
const gchar* tag)
155 xmlNodePtr tree = (xmlNodePtr)data_for_children;
156 gxpf_data* gdata = (gxpf_data*)global_data;
157 QofBook* book =
static_cast<decltype (book)
> (gdata->bookdata);
160 if (parent_data)
return TRUE;
164 if (!tag)
return TRUE;
166 g_return_val_if_fail (tree, FALSE);
168 book = dom_tree_to_book (tree, book);
170 gdata->cb (tag, gdata->parsedata, book);
178 gnc_book_id_end_handler (gpointer data_for_children,
179 GSList* data_from_children, GSList* sibling_data,
180 gpointer parent_data, gpointer global_data,
181 gpointer* result,
const gchar* tag)
184 xmlNodePtr tree = (xmlNodePtr)data_for_children;
185 gxpf_data* gdata = (gxpf_data*)global_data;
186 QofBook* book =
static_cast<decltype (book)
> (gdata->bookdata);
188 if (parent_data)
return TRUE;
189 if (!tag)
return TRUE;
191 g_return_val_if_fail (tree, FALSE);
193 successful = book_id_handler (tree, book);
200 gnc_book_slots_end_handler (gpointer data_for_children,
201 GSList* data_from_children, GSList* sibling_data,
202 gpointer parent_data, gpointer global_data,
203 gpointer* result,
const gchar* tag)
206 xmlNodePtr tree = (xmlNodePtr)data_for_children;
207 gxpf_data* gdata = (gxpf_data*)global_data;
208 QofBook* book =
static_cast<decltype (book)
> (gdata->bookdata);
210 if (parent_data)
return TRUE;
211 if (!tag)
return TRUE;
213 g_return_val_if_fail (tree, FALSE);
215 successful = book_slots_handler (tree, book);
222 dom_tree_to_book (xmlNodePtr node, QofBook* book)
226 successful = dom_tree_generic_parse (node, book_handlers_v2,
230 PERR (
"failed to parse book");
238 gnc_book_sixtp_parser_create (
void)
240 return sixtp_dom_parser_new (gnc_book_end_handler, NULL, NULL);
244 gnc_book_id_sixtp_parser_create (
void)
246 return sixtp_dom_parser_new (gnc_book_id_end_handler, NULL, NULL);
250 gnc_book_slots_sixtp_parser_create (
void)
252 return sixtp_dom_parser_new (gnc_book_slots_end_handler, NULL, NULL);
#define PERR(format, args...)
Log a serious error.
api for GnuCash version 2 XML-based file format
#define qof_book_get_guid(X)
deprecated
The type used to store guids in C.