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