QOF
0.7.5
|
00001 /***************************************************************** 00002 * qsf-xml.h 00003 * 00004 * Fri Nov 26 19:29:47 2004 00005 * Copyright 2004,2005,2006 Neil Williams <linux@codehelp.co.uk> 00006 * 00007 ****************************************************************/ 00008 /* 00009 * This program is free software; you can redistribute it and/or modify 00010 * it under the terms of the GNU General Public License as published by 00011 * the Free Software Foundation; either version 2 of the License, or 00012 * (at your option) any later version. 00013 * 00014 * This program is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 * GNU General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU General Public License 00020 * along with this program; if not, write to the Free Software 00021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00022 */ 00023 00024 #ifndef QSF_XML_H 00025 #define QSF_XML_H 00026 00032 #include <stdio.h> 00033 #include <stdlib.h> 00034 #include <regex.h> 00035 #include <time.h> 00036 #include "qof.h" 00037 00038 #include <libintl.h> 00039 #define _(String) dgettext (GETTEXT_PACKAGE, String) 00040 00041 typedef enum 00042 { 00044 QSF_UNDEF = 0, 00046 IS_QSF_MAP, 00048 IS_QSF_OBJ, 00050 HAVE_QSF_MAP, 00052 OUR_QSF_OBJ, 00053 } QsfType; 00054 00063 typedef struct QsfObject_s 00064 { 00065 GHashTable *parameters; 00066 QofIdType object_type; 00067 gint object_count; 00068 } QsfObject; 00069 00070 #define QSF_QOF_VERSION QOF_OBJECT_VERSION 00078 #define QSF_ROOT_TAG "qof-qsf" 00079 00084 #define QSF_DEFAULT_NS "http://qof.sourceforge.net/" 00085 00088 #define QSF_DATE_LENGTH MAX_DATE_LENGTH 00089 00091 #define QSF_BOOK_TAG "book" 00092 00094 #define QSF_BOOK_GUID "book-guid" 00095 00096 #define QSF_BOOK_COUNT "count" 00097 00098 #define QSF_OBJECT_TAG "object" 00099 00100 #define QSF_OBJECT_TYPE "type" 00101 00102 #define QSF_OBJECT_COUNT "count" 00103 00104 #define QSF_XML_VERSION "1.0" 00105 00124 #define QSF_OBJECT_KVP "path" 00125 00126 #define QSF_OBJECT_VALUE "value" 00127 00133 #define MAP_ROOT_TAG "qsf-map" 00134 00144 #define MAP_DEFINITION_TAG "definition" 00145 00151 #define MAP_DEFINE_TAG "define" 00152 00155 #define MAP_ITERATE_ATTR "foreach" 00156 00226 #define MAP_DEFAULT_TAG "default" 00227 00237 #define MAP_OBJECT_TAG "object" 00238 00248 #define MAP_CALCULATE_TAG "calculate" 00249 00257 #define MAP_QOF_VERSION "qof_version" 00258 00267 #define MAP_NAME_ATTR "name" 00268 00276 #define MAP_TYPE_ATTR "type" 00277 00286 #define MAP_VALUE_ATTR "value" 00287 00290 #define MAP_OBJECT_ATTR "object" 00291 00300 #define MAP_E_TYPE "e_type" 00301 00304 #define MAP_ENUM_TYPE "enum" 00305 00307 #define QSF_BOOLEAN_DEFAULT "boolean" 00308 00319 #define QSF_CONDITIONAL "if" 00320 00331 #define QSF_CONDITIONAL_SET "set" 00332 00355 #define QSF_CONDITIONAL_ELSE "else" 00356 00363 #define QSF_OPTION "option" 00364 00373 #define QSF_FORMATTING_OPTION "format" 00374 00411 #define QSF_XSD_TIME QOF_UTC_DATE_FORMAT 00412 00414 #define QSF_XML_BOOLEAN_TEST "true" 00415 00417 #define QSF_OBJECT_SCHEMA "qsf-object.xsd.xml" 00418 00420 #define QSF_MAP_SCHEMA "qsf-map.xsd.xml" 00421 00443 typedef enum 00444 { 00446 QSF_NO_OBJECT = 0, 00450 QSF_DEFINED_OBJECT, 00453 QSF_REGISTERED_OBJECT, 00455 QSF_CALCULATED_OBJECT, 00457 QSF_INVALID_OBJECT 00458 } QsfStatus; 00459 00466 typedef struct QsfMetadata_s 00467 { 00469 QsfType file_type; 00471 QsfObject *object_set; 00473 gint count; 00475 GList *qsf_object_list; 00477 GSList *qsf_sequence; 00479 GList *referenceList; 00481 GHashTable *qsf_parameter_hash, *qsf_define_hash; 00482 GHashTable *qsf_calculate_hash, *qsf_default_hash; 00484 GSList *supported_types; 00486 xmlDocPtr input_doc; 00488 xmlDocPtr output_doc; 00490 xmlNodePtr child_node; 00492 xmlNodePtr convert_node; 00494 xmlNodePtr param_node; 00496 xmlNodePtr output_node; 00498 xmlNodePtr output_root; 00500 xmlNodePtr book_node; 00502 xmlNodePtr lister; 00504 xmlNsPtr qsf_ns, map_ns; 00506 const gchar *qof_type; 00508 QofIdType qof_obj_type; 00510 QofIdType qof_foreach; 00512 gint foreach_limit; 00514 QofEntity *qsf_ent; 00516 QofBackend *be; 00518 gboolean knowntype; 00520 QofParam *qof_param; 00526 QofBook *book; 00528 gint boolean_calculation_done; 00530 gchar *filepath; 00532 gchar *map_path; 00534 gchar *full_kvp_path; 00536 gint64 use_gz_level; 00542 GList *map_files; 00544 const gchar *encoding; 00546 gint64 convert; 00547 QofErrorId err_nomap, err_overflow; 00548 } QsfParam; 00549 00555 typedef struct QsfValidates_s 00556 { 00557 QofErrorId error_state; 00558 const gchar *object_path; 00559 const gchar *map_path; 00562 GHashTable *object_table; 00565 GHashTable *map_table; 00566 /* Need to match object names, not just counts. */ 00569 gint valid_object_count; 00572 gint map_calculated_count; 00575 gint qof_registered_count; 00578 guint incoming_count; 00579 } QsfValidator; 00580 00586 gint 00587 qsf_compare_tag_strings (const xmlChar * node_name, 00588 gchar * tag_name); 00589 00595 gint 00596 qsf_strings_equal (const xmlChar * node_name, gchar * tag_name); 00597 00603 gint 00604 qsf_is_element (xmlNodePtr a, xmlNsPtr ns, gchar * c); 00605 00611 gint 00612 qsf_check_tag (QsfParam * params, gchar * qof_type); 00613 00620 void 00621 qsf_object_validation_handler (xmlNodePtr child, xmlNsPtr ns, 00622 QsfValidator * valid); 00623 00639 gboolean 00640 qsf_is_valid (const gchar * schema_dir, 00641 const gchar * schema_filename, xmlDocPtr doc); 00642 00649 GList **qsf_map_prepare_list (GList ** maps); 00650 00674 typedef void (*QsfNodeCB) (xmlNodePtr, xmlNsPtr, QsfParam *); 00681 typedef void (*QsfValidCB) (xmlNodePtr, xmlNsPtr, QsfValidator *); 00686 struct QsfNodeIterate 00687 { 00688 QsfNodeCB *fcn; 00689 QsfValidCB *v_fcn; 00690 xmlNsPtr ns; 00691 }; 00692 00712 gboolean is_qsf_object_be (QsfParam * params); 00713 00733 gboolean is_qsf_object (const gchar * path); 00734 00750 gboolean 00751 is_our_qsf_object_be (QsfParam * params); 00752 00768 gboolean is_our_qsf_object (const gchar * path); 00769 00782 gboolean is_qsf_map_be (QsfParam * params); 00783 00802 gboolean is_qsf_map (const gchar * path); 00803 00821 gboolean 00822 is_qsf_object_with_map_be (gchar * map_path, QsfParam * params); 00823 00840 gboolean 00841 is_qsf_object_with_map (const gchar * path, gchar * map_file); 00842 00852 void qsf_book_node_handler (xmlNodePtr child, xmlNsPtr qsf_ns, 00853 QsfParam * params); 00854 00867 KvpValue * 00868 string_to_kvp_value (const gchar * content, KvpValueType type); 00869 00876 void 00877 qsf_valid_foreach (xmlNodePtr parent, QsfValidCB cb, 00878 struct QsfNodeIterate *qsfiter, 00879 QsfValidator * valid); 00880 00886 void 00887 qsf_node_foreach (xmlNodePtr parent, QsfNodeCB cb, 00888 struct QsfNodeIterate *qsfiter, 00889 QsfParam * params); 00890 00906 xmlDocPtr 00907 qsf_object_convert (xmlDocPtr mapDoc, xmlNodePtr qsf_root, 00908 QsfParam * params); 00909 00915 void 00916 qsf_object_node_handler (xmlNodePtr child, xmlNsPtr qsf_ns, 00917 QsfParam * params); 00918 00922 #endif /* QSF_XML_H */