28#include "Recurrence.h"
31#include "gnc-xml-helper.h"
34#include "sixtp-utils.h"
35#include "sixtp-parsers.h"
36#include "sixtp-utils.h"
37#include "sixtp-dom-parsers.h"
38#include "sixtp-dom-generators.h"
41static QofLogModule log_module = GNC_MOD_IO;
43const gchar* recurrence_version_string =
"1.0.0";
44#define recurrence_root "gnc:recurrence"
45#define recurrence_mult "recurrence:mult"
46#define recurrence_period_type "recurrence:period_type"
47#define recurrence_start "recurrence:start"
48#define recurrence_weekend_adj "recurrence:weekend_adj"
53recurrence_period_type_handler (xmlNodePtr node, gpointer d)
56 auto set_ptype = [](
Recurrence *r,
const char* txt)
58 r->ptype = recurrencePeriodTypeFromString (txt);
60 apply_xmlnode_text (set_ptype, r, node);
61 return (r->ptype != -1);
65recurrence_start_date_handler (xmlNodePtr node, gpointer r)
69 d = dom_tree_to_gdate (node);
70 g_return_val_if_fail (d, FALSE);
71 g_return_val_if_fail (g_date_valid (d), FALSE);
78recurrence_mult_handler (xmlNodePtr node, gpointer r)
80 return dom_tree_to_guint16 (node, & ((
Recurrence*)r)->mult);
84recurrence_weekend_adj_handler (xmlNodePtr node, gpointer d)
87 auto set_wadj = [](
Recurrence *r,
const char* txt)
89 r->wadj = recurrenceWeekendAdjustFromString (txt);
91 apply_xmlnode_text (set_wadj, r, node);
92 return (r->wadj != -1);
97 { recurrence_mult, recurrence_mult_handler, 1, 0 },
98 { recurrence_period_type, recurrence_period_type_handler, 1, 0 },
99 { recurrence_start, recurrence_start_date_handler, 1, 0 },
100 { recurrence_weekend_adj, recurrence_weekend_adj_handler, 0, 0 },
105dom_tree_to_recurrence (xmlNodePtr node)
112 r->wadj = WEEKEND_ADJ_NONE;
113 successful = dom_tree_generic_parse (node, recurrence_dom_handlers, r);
116 PERR (
"failed to parse recurrence node");
117 xmlElemDump (stdout, NULL, node);
125recurrence_to_dom_tree (
const gchar* tag,
const Recurrence* r)
132 n = xmlNewNode (NULL, BAD_CAST tag);
133 xmlSetProp (n, BAD_CAST
"version", BAD_CAST recurrence_version_string);
134 xmlAddChild (n, guint_to_dom_tree (recurrence_mult,
135 recurrenceGetMultiplier (r)));
136 pt = recurrenceGetPeriodType (r);
137 xmlAddChild (n, text_to_dom_tree (recurrence_period_type,
138 recurrencePeriodTypeToString (pt)));
139 d = recurrenceGetDate (r);
140 xmlAddChild (n, gdate_to_dom_tree (recurrence_start, &d));
141 wadj = recurrenceGetWeekendAdjust (r);
142 if (wadj != WEEKEND_ADJ_NONE)
150 xmlAddChild (n, text_to_dom_tree (recurrence_weekend_adj,
151 recurrenceWeekendAdjustToString (wadj)));
#define PERR(format, args...)
Log a serious error.
api for GnuCash version 2 XML-based file format