1 /* 2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client 3 * Copyright (C) 1999-2012 Hiroyuki Yamamoto and the Claws Mail team 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 * 18 */ 19 20 #ifndef __XML_H__ 21 #define __XML_H__ 22 23 #include <glib.h> 24 #include <stdio.h> 25 26 #define XMLBUFSIZE 8192 27 28 typedef struct _XMLAttr XMLAttr; 29 typedef struct _XMLTag XMLTag; 30 typedef struct _XMLNode XMLNode; 31 typedef struct _XMLFile XMLFile; 32 33 struct _XMLAttr 34 { 35 gchar *name; 36 gchar *value; 37 }; 38 39 struct _XMLTag 40 { 41 gchar *tag; 42 GList *attr; 43 }; 44 45 struct _XMLNode 46 { 47 XMLTag *tag; 48 gchar *element; 49 }; 50 51 struct _XMLFile 52 { 53 FILE *fp; 54 gchar *path; 55 56 GString *buf; 57 gchar *bufp; 58 59 gchar *dtd; 60 gchar *encoding; 61 gboolean need_codeconv; 62 63 GList *tag_stack; 64 guint level; 65 66 gboolean is_empty_element; 67 }; 68 69 XMLFile *xml_open_file (const gchar *path); 70 void xml_close_file (XMLFile *file); 71 GNode *xml_parse_file (const gchar *path); 72 73 gint xml_get_dtd (XMLFile *file); 74 gint xml_parse_next_tag (XMLFile *file); 75 76 XMLTag *xml_get_current_tag (XMLFile *file); 77 GList *xml_get_current_tag_attr(XMLFile *file); 78 gchar *xml_get_element (XMLFile *file); 79 80 gboolean xml_compare_tag (XMLFile *file, 81 const gchar *name); 82 83 XMLNode *xml_node_new (XMLTag *tag, 84 const gchar *text); 85 86 XMLTag *xml_tag_new (const gchar *tag); 87 XMLAttr *xml_attr_new (const gchar *name, 88 const gchar *value); 89 XMLAttr *xml_attr_new_int (const gchar *name, 90 const gint value); 91 void xml_tag_add_attr (XMLTag *tag, 92 XMLAttr* attr); 93 94 95 gint xml_file_put_escape_str (FILE *fp, 96 const gchar *str); 97 98 gint xml_file_put_xml_decl (FILE *fp); 99 100 void xml_free_tree (GNode *node); 101 102 int xml_write_tree (GNode *node, 103 FILE *fp); 104 GNode *xml_copy_tree (GNode *node); 105 106 #endif /* __XML_H__ */ 107