/* Cataract - Static web photo gallery generator * Copyright (C) 2008 Tomas Bzatek * * 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 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __CGG__XML_PARSER_H__ #define __CGG__XML_PARSER_H__ #include #include #include #include "properties-table.h" G_BEGIN_DECLS typedef struct { xmlDocPtr doc; xmlXPathContextPtr xpathCtx; } TXMLFile; /* * xml_parser_load: initialize and load the XML document */ TXMLFile * xml_parser_load (const gchar *filename); /* * xml_parser_free: close the XML document parser and frees all memory */ void xml_parser_free (TXMLFile *file); /* * xml_file_get_node_name: retrieve name of the XPath node */ gchar * xml_file_get_node_name (TXMLFile *file, const gchar *x_path); /* * xml_file_get_node_value: retrieve string value from XPath node * - multiple matched nodes will be concatenated into one string * - otherwise please use [0], [1] etc. quantificators */ gchar * xml_file_get_node_value (TXMLFile *file, const gchar *x_path); gchar * xml_file_get_node_value_with_default (TXMLFile *file, const gchar *x_path, const gchar *_default); /* * xml_file_get_node_attribute: retrieve attribute value from XPath node * - returns NULL if node is not present */ gchar * xml_file_get_node_attribute (TXMLFile *file, const gchar *x_path, const gchar *attr); gchar * xml_file_get_node_attribute_with_default (TXMLFile *file, const gchar *x_path, const gchar *attr, const gchar *_default); /* * xml_file_get_node_attribute_*: retrieve attribute value from XPath node, storing it in *value, returning TRUE if value has been set. */ gboolean xml_file_get_node_attribute_long (TXMLFile *file, const gchar *x_path, const gchar *attr, long int *value); long int xml_file_get_node_attribute_long_with_default (TXMLFile *file, const gchar *x_path, const gchar *attr, const long int _default); gboolean xml_file_get_node_attribute_boolean (TXMLFile *file, const gchar *x_path, const gchar *attr, gboolean *value); gboolean xml_file_get_node_attribute_boolean_with_default (TXMLFile *file, const gchar *x_path, const gchar *attr, const gboolean _default); gboolean xml_file_get_node_attribute_double (TXMLFile *file, const gchar *x_path, const gchar *attr, double *value); double xml_file_get_node_attribute_double_with_default (TXMLFile *file, const gchar *x_path, const gchar *attr, const double _default); /* * xml_file_get_node_present: existency test of the XPath node */ gboolean xml_file_get_node_present (TXMLFile *file, const gchar *x_path); /* * xml_file_node_get_children_count: retrieve number of children items of the specified XPath node */ int xml_file_node_get_children_count (TXMLFile *file, const gchar *x_path); /* * prop_xml_attr_*: retrieve data from the XML file and set the property if suceeded * prop_xml_attr_*def: retrieve data from the XML file and set the property or default value on failure */ #define prop_xml_attr(t, n, xml, x_path, attr) { \ gchar *xxxs = xml_file_get_node_attribute (xml, x_path, attr); \ if (xxxs != NULL) \ properties_table_add_string (t, n, xxxs); \ g_free (xxxs); \ } #define prop_xml_attr_def(t, n, xml, x_path, attr, _default) { \ gchar *xxxs = xml_file_get_node_attribute_with_default (xml, x_path, attr, _default); \ properties_table_add_string (t, n, xxxs); \ g_free (xxxs); \ } #define prop_xml_attr_long(t, n, xml, x_path, attr) { \ long int xxxi; \ if (xml_file_get_node_attribute_long (xml, x_path, attr, &xxxi)) \ properties_table_add_int (t, n, xxxi); \ } #define prop_xml_attr_long_def(t, n, xml, x_path, attr, _default) \ properties_table_add_int (t, n, xml_file_get_node_attribute_long_with_default (xml, x_path, attr, _default)) #define prop_xml_attr_bool(t, n, xml, x_path, attr) { \ gboolean xxxb; \ if (xml_file_get_node_attribute_boolean (xml, x_path, attr, &xxxb)) \ properties_table_add_bool (t, n, xxxb); \ } #define prop_xml_attr_bool_def(t, n, xml, x_path, attr, _default) \ properties_table_add_bool (t, n, xml_file_get_node_attribute_boolean_with_default (xml, x_path, attr, _default)) #define prop_xml_attr_double(t, n, xml, x_path, attr) { \ double xxxd; \ if (xml_file_get_node_attribute_double (xml, x_path, attr, &xxxd)) \ properties_table_add_double (t, n, xxxd); \ } #define prop_xml_attr_double_def(t, n, xml, x_path, attr, _default) \ properties_table_add_double (t, n, xml_file_get_node_attribute_double_with_default (xml, x_path, attr, _default)) G_END_DECLS #endif /* __CGG__XML_PARSER_H__ */