#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <eggdrop/eggdrop.h>
Go to the source code of this file.
Defines | |
#define | XML_INDENT_CHAR '\t' |
Functions | |
static int | xml_write_node (FILE *fp, xml_node_t *node) |
static int | xml_write_children (FILE *fp, xml_node_t *node) |
static int | xml_write_attributes (FILE *fp, xml_node_t *node) |
static int | xml_write_element (FILE *fp, xml_node_t *node) |
static int | xml_write_document (FILE *fp, xml_node_t *node) |
static int | xml_write_comment (FILE *fp, xml_node_t *node) |
static int | xml_write_cdata_section (FILE *fp, xml_node_t *node) |
static int | xml_write_processing_instruction (FILE *fp, xml_node_t *node) |
int | xml_save_file (const char *file, xml_node_t *node, int options) |
Variables | |
static const char | rcsid [] = "$Id: xmlwrite.c,v 1.11 2004-09-26 09:42:09 stdarg Exp $" |
static int | write_options = XML_NONE |
static int | level = 0 |
static char | indent [32] = {0} |
#define XML_INDENT_CHAR '\t' |
Definition at line 31 of file xmlwrite.c.
int xml_save_file | ( | const char * | file, | |
xml_node_t * | node, | |||
int | options | |||
) |
Definition at line 165 of file xmlwrite.c.
References NULL, write_options, XML_NONE, xml_set_error(), and xml_write_node().
Referenced by channel_save(), config_save(), and user_save().
00166 { 00167 FILE *fp; 00168 int ret; 00169 00170 /* clear any last error */ 00171 xml_set_error(NULL); 00172 00173 fp = fopen(file, "w"); 00174 00175 if (!fp) { 00176 xml_set_error("failed to open file"); 00177 return -1; 00178 } 00179 00180 write_options = options; 00181 ret = xml_write_node(fp, node); 00182 write_options = XML_NONE; 00183 00184 fclose(fp); 00185 00186 return ret; 00187 }
static int xml_write_attributes | ( | FILE * | fp, | |
xml_node_t * | node | |||
) | [static] |
Definition at line 64 of file xmlwrite.c.
References xml_node::attributes, xml_attr_t::name, xml_node::nattributes, and xml_attr_t::value.
Referenced by xml_write_element(), and xml_write_processing_instruction().
00065 { 00066 int i; 00067 xml_attr_t *attr; 00068 00069 for (i = 0; i < node->nattributes; i++) { 00070 attr = node->attributes[i]; 00071 if (attr->value) fprintf(fp, " %s=\"%s\"", attr->name, attr->value); 00072 } 00073 00074 return (0); 00075 }
static int xml_write_cdata_section | ( | FILE * | fp, | |
xml_node_t * | node | |||
) | [static] |
Definition at line 119 of file xmlwrite.c.
References xml_node::text.
Referenced by xml_write_node().
00120 { 00121 fprintf(fp, "<![CDATA[%s]]>\n", node->text); 00122 return(0); 00123 }
static int xml_write_children | ( | FILE * | fp, | |
xml_node_t * | node | |||
) | [static] |
Definition at line 40 of file xmlwrite.c.
References xml_node::children, indent, level, xml_node::next, xml_node::text, and xml_write_node().
Referenced by xml_write_element().
00041 { 00042 int ret = 0; 00043 const char *text; 00044 00045 /* init indent */ 00046 memset(indent, '\t', sizeof(indent)); 00047 00048 indent[++level] = 0; 00049 00050 /* XXX: encode text */ 00051 text = node->text; 00052 if (text && *text) fprintf(fp, "%s%s\n", indent, text); 00053 00054 for (node = node->children; node; node = node->next) { 00055 fprintf(fp, "%s", indent); 00056 if ((ret = xml_write_node(fp, node)) == -1) break; 00057 } 00058 00059 indent[--level] = 0; 00060 00061 return ret; 00062 }
static int xml_write_comment | ( | FILE * | fp, | |
xml_node_t * | node | |||
) | [static] |
Definition at line 112 of file xmlwrite.c.
References xml_node::text.
Referenced by xml_write_node().
00113 { 00114 /* XXX: that's wrong, text needs to encoded */ 00115 fprintf(fp, "<!--%s-->\n", node->text); 00116 return(0); 00117 }
static int xml_write_document | ( | FILE * | fp, | |
xml_node_t * | node | |||
) | [static] |
Definition at line 100 of file xmlwrite.c.
References xml_node::children, xml_node::next, and xml_write_node().
Referenced by xml_write_node().
00101 { 00102 int ret; 00103 00104 ret = 0; 00105 for (node = node->children; node; node = node->next) { 00106 if ((ret = xml_write_node(fp, node)) != 0) 00107 break; 00108 } 00109 return ret; 00110 }
static int xml_write_element | ( | FILE * | fp, | |
xml_node_t * | node | |||
) | [static] |
Definition at line 77 of file xmlwrite.c.
References indent, xml_node::name, xml_node::nchildren, xml_node::text, xml_write_attributes(), and xml_write_children().
Referenced by xml_write_node().
00078 { 00079 fprintf(fp, "<%s", node->name); 00080 00081 if (xml_write_attributes(fp, node) == -1) return(-1); 00082 00083 if (node->nchildren == 0) { 00084 if (node->text) { 00085 fprintf(fp, ">%s</%s>\n", node->text, node->name); 00086 } else { 00087 fprintf(fp, "/>\n"); 00088 } 00089 00090 return (0); 00091 } 00092 00093 fprintf(fp, ">\n"); 00094 if (xml_write_children(fp, node) != 0) return(-1); 00095 00096 fprintf(fp, "%s</%s>\n", indent, node->name); 00097 return(0); 00098 }
static int xml_write_node | ( | FILE * | fp, | |
xml_node_t * | node | |||
) | [static] |
Definition at line 136 of file xmlwrite.c.
References xml_node::type, XML_ATTRIBUTE, XML_CDATA_SECTION, XML_COMMENT, XML_DOCUMENT, XML_ELEMENT, XML_PROCESSING_INSTRUCTION, xml_set_error(), xml_write_cdata_section(), xml_write_comment(), xml_write_document(), xml_write_element(), and xml_write_processing_instruction().
Referenced by xml_save_file(), xml_write_children(), and xml_write_document().
00137 { 00138 switch (node->type) { 00139 00140 case (XML_DOCUMENT): 00141 return xml_write_document(fp, node); 00142 00143 case (XML_ELEMENT): 00144 return xml_write_element(fp, node); 00145 00146 case (XML_COMMENT): 00147 return xml_write_comment(fp, node); 00148 00149 case (XML_CDATA_SECTION): 00150 return xml_write_cdata_section(fp, node); 00151 00152 case (XML_PROCESSING_INSTRUCTION): 00153 return xml_write_processing_instruction(fp, node); 00154 00155 case (XML_ATTRIBUTE): 00156 /* just ignore this */ 00157 return (0); 00158 } 00159 00160 xml_set_error("unknown node type"); 00161 00162 return (-1); 00163 }
static int xml_write_processing_instruction | ( | FILE * | fp, | |
xml_node_t * | node | |||
) | [static] |
Definition at line 125 of file xmlwrite.c.
References xml_node::name, and xml_write_attributes().
Referenced by xml_write_node().
00126 { 00127 fprintf(fp, "<?%s", node->name); 00128 00129 if (xml_write_attributes(fp, node) != 0) return(-1); 00130 00131 fprintf(fp, "?>\n"); 00132 00133 return (0); 00134 }
char indent[32] = {0} [static] |
Definition at line 38 of file xmlwrite.c.
Referenced by xml_write_children(), and xml_write_element().
int level = 0 [static] |
const char rcsid[] = "$Id: xmlwrite.c,v 1.11 2004-09-26 09:42:09 stdarg Exp $" [static] |
Definition at line 21 of file xmlwrite.c.
int write_options = XML_NONE [static] |