mirror of
https://github.com/Gnucash/gnucash.git
synced 2024-11-29 20:24:25 -06:00
83d14e1c1c
It is split into - /libgnucash (for the non-gui bits) - /gnucash (for the gui) - /common (misc source files used by both) - /bindings (currently only holds python bindings) This is the first step in restructuring the code. It will need much more fine tuning later on.
261 lines
10 KiB
C
261 lines
10 KiB
C
/********************************************************************
|
|
* sixtp.h -- header file for XML parsing *
|
|
* Copyright 2001 Gnumatic, Inc. *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or *
|
|
* modify it under the terms of the GNU General Public License as *
|
|
* published by the Free Software Foundation; either version 2 of *
|
|
* the License, or (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License*
|
|
* along with this program; if not, contact: *
|
|
* *
|
|
* Free Software Foundation Voice: +1-617-542-5942 *
|
|
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
|
|
* Boston, MA 02110-1301, USA gnu@gnu.org *
|
|
* *
|
|
********************************************************************/
|
|
|
|
#ifndef SIXTP_H
|
|
#define SIXTP_H
|
|
extern "C"
|
|
{
|
|
#include <glib.h>
|
|
#include <stdio.h>
|
|
|
|
#include <stdarg.h>
|
|
#include "gnc-engine.h"
|
|
}
|
|
#include "gnc-xml-helper.h"
|
|
#include "gnc-backend-xml.h"
|
|
|
|
typedef struct sixtp_gdv2 sixtp_gdv2;
|
|
typedef void (*countCallbackFn) (sixtp_gdv2* gd, const char* type);
|
|
|
|
typedef struct
|
|
{
|
|
int accounts_total;
|
|
int accounts_loaded;
|
|
|
|
int books_total;
|
|
int books_loaded;
|
|
|
|
int commodities_total;
|
|
int commodities_loaded;
|
|
|
|
int transactions_total;
|
|
int transactions_loaded;
|
|
|
|
int prices_total;
|
|
int prices_loaded;
|
|
|
|
int schedXactions_total;
|
|
int schedXactions_loaded;
|
|
|
|
int budgets_total;
|
|
int budgets_loaded;
|
|
} load_counter;
|
|
|
|
struct sixtp_gdv2
|
|
{
|
|
QofBook* book;
|
|
load_counter counter;
|
|
countCallbackFn countCallback;
|
|
QofBePercentageFunc gui_display_fn;
|
|
gboolean exporting;
|
|
};
|
|
typedef struct _sixtp_child_result sixtp_child_result;
|
|
|
|
typedef gboolean (*sixtp_start_handler) (GSList* sibling_data,
|
|
gpointer parent_data,
|
|
gpointer global_data,
|
|
gpointer* data_for_children,
|
|
gpointer* result,
|
|
const gchar* tag,
|
|
gchar** attrs);
|
|
|
|
typedef gboolean (*sixtp_before_child_handler) (gpointer data_for_children,
|
|
GSList* data_from_children,
|
|
GSList* sibling_data,
|
|
gpointer parent_data,
|
|
gpointer global_data,
|
|
gpointer* result,
|
|
const gchar* tag,
|
|
const gchar* child_tag);
|
|
|
|
typedef gboolean (*sixtp_after_child_handler) (gpointer data_for_children,
|
|
GSList* data_from_children,
|
|
GSList* sibling_data,
|
|
gpointer parent_data,
|
|
gpointer global_data,
|
|
gpointer* result,
|
|
const gchar* tag,
|
|
const gchar* child_tag,
|
|
sixtp_child_result* child_result);
|
|
|
|
typedef gboolean (*sixtp_end_handler) (gpointer data_for_children,
|
|
GSList* data_from_children,
|
|
GSList* sibling_data,
|
|
gpointer parent_data,
|
|
gpointer global_data,
|
|
gpointer* result,
|
|
const gchar* tag);
|
|
|
|
typedef gboolean (*sixtp_characters_handler) (GSList* sibling_data,
|
|
gpointer parent_data,
|
|
gpointer global_data,
|
|
gpointer* result,
|
|
const char* text,
|
|
int length);
|
|
|
|
typedef void (*sixtp_result_handler) (sixtp_child_result* result);
|
|
|
|
typedef void (*sixtp_fail_handler) (gpointer data_for_children,
|
|
GSList* data_from_children,
|
|
GSList* sibling_data,
|
|
gpointer parent_data,
|
|
gpointer global_data,
|
|
gpointer* result,
|
|
const gchar* tag);
|
|
|
|
typedef void (*sixtp_push_handler) (xmlParserCtxtPtr xml_context,
|
|
gpointer user_data);
|
|
|
|
typedef struct sixtp
|
|
{
|
|
/* If you change this, don't forget to modify all the copy/etc. functions */
|
|
sixtp_start_handler start_handler;
|
|
sixtp_before_child_handler before_child;
|
|
sixtp_after_child_handler after_child;
|
|
sixtp_end_handler end_handler;
|
|
sixtp_characters_handler characters_handler;
|
|
|
|
sixtp_fail_handler fail_handler;
|
|
/* called for failures before the close tag */
|
|
|
|
sixtp_result_handler cleanup_result; /* called unless failure */
|
|
sixtp_result_handler cleanup_chars; /* called unless failure */
|
|
|
|
sixtp_result_handler result_fail_handler;
|
|
/* called to cleanup results from this node on failure */
|
|
|
|
sixtp_result_handler chars_fail_handler;
|
|
/* called to cleanup character results when cleaning up this node's
|
|
children. */
|
|
|
|
GHashTable* child_parsers;
|
|
} sixtp;
|
|
|
|
typedef enum
|
|
{
|
|
SIXTP_NO_MORE_HANDLERS,
|
|
|
|
SIXTP_START_HANDLER_ID,
|
|
SIXTP_BEFORE_CHILD_HANDLER_ID,
|
|
SIXTP_AFTER_CHILD_HANDLER_ID,
|
|
SIXTP_END_HANDLER_ID,
|
|
SIXTP_CHARACTERS_HANDLER_ID,
|
|
|
|
SIXTP_FAIL_HANDLER_ID,
|
|
|
|
SIXTP_CLEANUP_RESULT_ID,
|
|
SIXTP_CLEANUP_CHARS_ID,
|
|
|
|
SIXTP_RESULT_FAIL_ID,
|
|
|
|
SIXTP_CHARS_FAIL_ID,
|
|
} sixtp_handler_type;
|
|
|
|
/* completely invalid tag for xml */
|
|
#define SIXTP_MAGIC_CATCHER "&MAGIX&"
|
|
|
|
typedef enum
|
|
{
|
|
SIXTP_CHILD_RESULT_CHARS,
|
|
SIXTP_CHILD_RESULT_NODE
|
|
} sixtp_child_result_type;
|
|
|
|
struct _sixtp_child_result
|
|
{
|
|
sixtp_child_result_type type;
|
|
gchar* tag; /* NULL for a CHARS node. */
|
|
gpointer data;
|
|
gboolean should_cleanup;
|
|
sixtp_result_handler cleanup_handler;
|
|
sixtp_result_handler fail_handler;
|
|
};
|
|
|
|
typedef struct sixtp_sax_data
|
|
{
|
|
gboolean parsing_ok;
|
|
GSList* stack;
|
|
gpointer global_data;
|
|
xmlParserCtxtPtr saxParserCtxt;
|
|
sixtp* bad_xml_parser;
|
|
} sixtp_sax_data;
|
|
|
|
gboolean is_child_result_from_node_named (sixtp_child_result* cr,
|
|
const char* tag);
|
|
void sixtp_child_free_data (sixtp_child_result* result);
|
|
void sixtp_child_result_destroy (sixtp_child_result* r);
|
|
void sixtp_child_result_print (sixtp_child_result* cr, FILE* f);
|
|
|
|
void sixtp_sax_start_handler (void* user_data, const xmlChar* name,
|
|
const xmlChar** attrs);
|
|
void sixtp_sax_characters_handler (void* user_data, const xmlChar* text,
|
|
int len);
|
|
void sixtp_sax_end_handler (void* user_data, const xmlChar* name);
|
|
|
|
sixtp* sixtp_new (void);
|
|
void sixtp_destroy (sixtp* sp);
|
|
|
|
void sixtp_handle_catastrophe (sixtp_sax_data* sax_data);
|
|
xmlEntityPtr sixtp_sax_get_entity_handler (void* user_data,
|
|
const xmlChar* name);
|
|
|
|
gboolean sixtp_parse_file (sixtp* sixtp, const char* filename,
|
|
gpointer data_for_top_level, gpointer global_data,
|
|
gpointer* parse_result);
|
|
gboolean sixtp_parse_fd (sixtp* sixtp, FILE* fd,
|
|
gpointer data_for_top_level, gpointer global_data,
|
|
gpointer* parse_result);
|
|
gboolean sixtp_parse_buffer (sixtp* sixtp, char* bufp, int bufsz,
|
|
gpointer data_for_top_level, gpointer global_data,
|
|
gpointer* parse_result);
|
|
gboolean sixtp_parse_push (sixtp* sixtp, sixtp_push_handler push_handler,
|
|
gpointer push_user_data, gpointer data_for_top_level,
|
|
gpointer global_data, gpointer* parse_result);
|
|
|
|
void sixtp_set_start (sixtp* parser, sixtp_start_handler start_handler);
|
|
void sixtp_set_before_child (sixtp* parser,
|
|
sixtp_before_child_handler handler);
|
|
void sixtp_set_after_child (sixtp* parser, sixtp_after_child_handler handler);
|
|
void sixtp_set_end (sixtp* parser, sixtp_end_handler end_handler);
|
|
void sixtp_set_chars (sixtp* parser, sixtp_characters_handler char_handler);
|
|
void sixtp_set_cleanup_result (sixtp* parser, sixtp_result_handler handler);
|
|
void sixtp_set_cleanup_chars (sixtp* parser, sixtp_result_handler handler);
|
|
void sixtp_set_fail (sixtp* parser, sixtp_fail_handler handler);
|
|
void sixtp_set_result_fail (sixtp* parser, sixtp_result_handler handler);
|
|
void sixtp_set_chars_fail (sixtp* parser, sixtp_result_handler handler);
|
|
|
|
sixtp* sixtp_set_any (sixtp* tochange, gboolean cleanup, ...);
|
|
sixtp* sixtp_add_some_sub_parsers (sixtp* tochange, gboolean cleanup, ...);
|
|
|
|
gboolean sixtp_add_sub_parser (sixtp* parser, const gchar* tag,
|
|
sixtp* sub_parser);
|
|
|
|
QofBookFileType gnc_is_our_xml_file (const char* filename,
|
|
gboolean* with_encoding);
|
|
|
|
QofBookFileType gnc_is_our_first_xml_chunk (char* chunk,
|
|
gboolean* with_encoding);
|
|
/** Call after loading each record */
|
|
void sixtp_run_callback (sixtp_gdv2* data, const char* type);
|
|
|
|
#endif /* _SIXTP_H_ */
|