comparison src/xmlnode.c @ 10423:3232e1a33899

[gaim-migrate @ 11675] Set version numbers for all our xml files Use xmlnode for writing accounts.xml Add 2 conveniencey helper functions to xmlnode committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 26 Dec 2004 18:38:22 +0000
parents 5b7a74d397cc
children 108151be77a3
comparison
equal deleted inserted replaced
10422:e0cf2f3f9929 10423:3232e1a33899
36 36
37 static xmlnode* 37 static xmlnode*
38 new_node(const char *name, XMLNodeType type) 38 new_node(const char *name, XMLNodeType type)
39 { 39 {
40 xmlnode *node = g_new0(xmlnode, 1); 40 xmlnode *node = g_new0(xmlnode, 1);
41
41 if(name) 42 if(name)
42 node->name = g_strdup(name); 43 node->name = g_strdup(name);
43 node->type = type; 44 node->type = type;
44 45
45 return node; 46 return node;
51 g_return_val_if_fail(name != NULL, NULL); 52 g_return_val_if_fail(name != NULL, NULL);
52 53
53 return new_node(name, XMLNODE_TYPE_TAG); 54 return new_node(name, XMLNODE_TYPE_TAG);
54 } 55 }
55 56
56 xmlnode *xmlnode_new_child(xmlnode *parent, const char *name) 57 xmlnode*
58 xmlnode_new_with_data(const char *name, const char *data, size_t size)
59 {
60 xmlnode *node;
61
62 g_return_val_if_fail(name != NULL, NULL);
63 g_return_val_if_fail(data != NULL, NULL);
64 g_return_val_if_fail(size != 0, NULL);
65
66 node = new_node(name, XMLNODE_TYPE_TAG);
67 xmlnode_insert_data(node, data, size);
68
69 return node;
70 }
71
72 xmlnode *
73 xmlnode_new_child(xmlnode *parent, const char *name)
57 { 74 {
58 xmlnode *node; 75 xmlnode *node;
59 76
60 g_return_val_if_fail(parent != NULL, NULL); 77 g_return_val_if_fail(parent != NULL, NULL);
61 g_return_val_if_fail(name != NULL, NULL); 78 g_return_val_if_fail(name != NULL, NULL);
62 79
63 node = new_node(name, XMLNODE_TYPE_TAG); 80 node = new_node(name, XMLNODE_TYPE_TAG);
81
82 xmlnode_insert_child(parent, node);
83
84 return node;
85 }
86
87 xmlnode *
88 xmlnode_new_child_with_data(xmlnode *parent, const char *name,
89 const char *data, size_t size)
90 {
91 xmlnode *node;
92
93 g_return_val_if_fail(parent != NULL, NULL);
94 g_return_val_if_fail(name != NULL, NULL);
95 g_return_val_if_fail(data != NULL, NULL);
96 g_return_val_if_fail(size != 0, NULL);
97
98 node = new_node(name, XMLNODE_TYPE_TAG);
99 xmlnode_insert_data(node, data, size);
64 100
65 xmlnode_insert_child(parent, node); 101 xmlnode_insert_child(parent, node);
66 102
67 return node; 103 return node;
68 } 104 }
160 } 196 }
161 197
162 return NULL; 198 return NULL;
163 } 199 }
164 200
165 void xmlnode_free(xmlnode *node) 201 void
202 xmlnode_free(xmlnode *node)
166 { 203 {
167 xmlnode *x, *y; 204 xmlnode *x, *y;
168 205
169 g_return_if_fail(node != NULL); 206 g_return_if_fail(node != NULL);
170 207
241 return NULL; 278 return NULL;
242 279
243 return g_string_free(str, FALSE); 280 return g_string_free(str, FALSE);
244 } 281 }
245 282
246 static gchar *xmlnode_to_str_helper(xmlnode *node, int *len, gboolean formatting, int depth) 283 static gchar *
284 xmlnode_to_str_helper(xmlnode *node, int *len, gboolean formatting, int depth)
247 { 285 {
248 GString *text = g_string_new(""); 286 GString *text = g_string_new("");
249 xmlnode *c; 287 xmlnode *c;
250 char *node_name, *esc, *esc2, *tab = NULL; 288 char *node_name, *esc, *esc2, *tab = NULL;
251 gboolean need_end = FALSE, pretty = formatting; 289 gboolean need_end = FALSE, pretty = formatting;
311 *len = text->len; 349 *len = text->len;
312 350
313 return g_string_free(text, FALSE); 351 return g_string_free(text, FALSE);
314 } 352 }
315 353
316 gchar *xmlnode_to_str(xmlnode *node, int *len) { 354 gchar *
355 xmlnode_to_str(xmlnode *node, int *len)
356 {
317 return xmlnode_to_str_helper(node, len, FALSE, 0); 357 return xmlnode_to_str_helper(node, len, FALSE, 0);
318 } 358 }
319 359
320 gchar *xmlnode_to_formatted_str(xmlnode *node, int *len) { 360 gchar *
361 xmlnode_to_formatted_str(xmlnode *node, int *len)
362 {
321 gchar *xml, *xml_with_declaration; 363 gchar *xml, *xml_with_declaration;
322 364
323 xml = xmlnode_to_str_helper(node, len, TRUE, 0); 365 xml = xmlnode_to_str_helper(node, len, TRUE, 0);
324 xml_with_declaration = 366 xml_with_declaration =
325 g_strdup_printf("<?xml version='1.0' encoding='UTF-8' ?>\n\n%s", xml); 367 g_strdup_printf("<?xml version='1.0' encoding='UTF-8' ?>\n\n%s", xml);
393 NULL, 435 NULL,
394 NULL 436 NULL
395 }; 437 };
396 438
397 439
398 xmlnode *xmlnode_from_str(const char *str, size_t size) 440 xmlnode *
441 xmlnode_from_str(const char *str, size_t size)
399 { 442 {
400 struct _xmlnode_parser_data *xpd = g_new0(struct _xmlnode_parser_data, 1); 443 struct _xmlnode_parser_data *xpd = g_new0(struct _xmlnode_parser_data, 1);
401 xmlnode *ret; 444 xmlnode *ret;
402 GMarkupParseContext *context; 445 GMarkupParseContext *context;
403 size_t real_size = size == -1 ? strlen(str) : size; 446 size_t real_size = size == -1 ? strlen(str) : size;
416 ret = xpd->current; 459 ret = xpd->current;
417 g_free(xpd); 460 g_free(xpd);
418 return ret; 461 return ret;
419 } 462 }
420 463
421 xmlnode *xmlnode_copy(xmlnode *src) 464 xmlnode *
465 xmlnode_copy(xmlnode *src)
422 { 466 {
423 xmlnode *ret; 467 xmlnode *ret;
424 xmlnode *child; 468 xmlnode *child;
425 xmlnode *sibling = NULL; 469 xmlnode *sibling = NULL;
426 470
449 } 493 }
450 494
451 return ret; 495 return ret;
452 } 496 }
453 497
454 xmlnode *xmlnode_get_next_twin(xmlnode *node) { 498 xmlnode *
499 xmlnode_get_next_twin(xmlnode *node)
500 {
455 xmlnode *sibling; 501 xmlnode *sibling;
456 const char *ns = xmlnode_get_attrib(node, "xmlns"); 502 const char *ns = xmlnode_get_attrib(node, "xmlns");
457 503
458 g_return_val_if_fail(node != NULL, NULL); 504 g_return_val_if_fail(node != NULL, NULL);
459 g_return_val_if_fail(node->type == XMLNODE_TYPE_TAG, NULL); 505 g_return_val_if_fail(node->type == XMLNODE_TYPE_TAG, NULL);
468 return sibling; 514 return sibling;
469 } 515 }
470 516
471 return NULL; 517 return NULL;
472 } 518 }
473