1 /* logjam - a GTK client for LiveJournal.
2 * Copyright (C) 2000-2003 Evan Martin <evan@livejournal.com>
4 #ifndef __LOGJAM_XML_H__
5 #define __LOGJAM_XML_H__
9 extern void jam_xmlNewDoc (xmlDocPtr
*doc
, xmlNodePtr
*node
, char *name
);
11 extern char *jam_xmlGetString (xmlDocPtr doc
, xmlNodePtr node
);
12 extern guint32
jam_xmlGetUInt32 (xmlDocPtr doc
, xmlNodePtr node
);
13 extern gboolean
jam_xmlGetInt (xmlDocPtr doc
, xmlNodePtr node
, int *value
);
15 extern xmlNodePtr
jam_xmlAddInt (xmlNodePtr node
, char *name
, int val
);
17 extern void jam_xmlSetIntProp (xmlNodePtr node
, const char *name
, int value
);
18 extern gboolean
jam_xmlGetIntProp (xmlNodePtr node
, const char *name
, int *value
);
23 * basically, these XML_* functions run a series of ifs on the node name.
24 * be sure to end with XML_GET_END, which prints error information if a node
27 #define XML_GET_IF(key, what) if (xmlStrcmp(node->name, BAD_CAST key) == 0) { what } else
28 #define XML_GET_FUNC(key, dest, func) XML_GET_IF(key, dest = func(doc, node);)
29 #define XML_GET_STR(key, dest) XML_GET_FUNC(key, dest, jam_xmlGetString)
30 #define XML_GET_UINT32(key, dest) XML_GET_FUNC(key, dest, jam_xmlGetUInt32)
31 #define XML_GET_INT(key, dest) XML_GET_IF(key, jam_xmlGetInt(doc, node, &dest);)
32 #define XML_GET_BOOL(key, dest) XML_GET_IF(key, dest = TRUE; )
33 #define XML_GET_LIST(key, dest, func) XML_GET_IF(key, dest = g_slist_append(dest, func(doc, node)); )
34 #define XML_GET_SUB(dest, func) if (xmlStrcmp(node->name, BAD_CAST "text") != 0 && func(dest, doc, node)) { ; } else
35 #define XML_GET_END(func) if (xmlStrcmp(node->name, BAD_CAST "text") != 0) {}