Mercurial > pidgin
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 |