00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef GIMP_PRINT_MXML_H
00024 # define GIMP_PRINT_MXML_H
00025
00026
00027
00028
00029
00030 # include <stdio.h>
00031 # include <stdlib.h>
00032 # include <string.h>
00033 # include <ctype.h>
00034 # include <errno.h>
00035
00036
00037
00038
00039
00040
00041 # define STP_MXML_WRAP 70
00042 # define STP_MXML_TAB 8
00043
00044 # define STP_MXML_NO_CALLBACK 0
00045 # define STP_MXML_NO_PARENT 0
00046
00047 # define STP_MXML_DESCEND 1
00048 # define STP_MXML_NO_DESCEND 0
00049 # define STP_MXML_DESCEND_FIRST -1
00050
00051 # define STP_MXML_WS_BEFORE_OPEN 0
00052 # define STP_MXML_WS_AFTER_OPEN 1
00053 # define STP_MXML_WS_BEFORE_CLOSE 2
00054 # define STP_MXML_WS_AFTER_CLOSE 3
00055
00056 # define STP_MXML_ADD_BEFORE 0
00057 # define STP_MXML_ADD_AFTER 1
00058 # define STP_MXML_ADD_TO_PARENT NULL
00059
00060
00061
00062
00063
00064
00065 typedef enum stp_mxml_type_e
00066 {
00067 STP_MXML_ELEMENT,
00068 STP_MXML_INTEGER,
00069 STP_MXML_OPAQUE,
00070 STP_MXML_REAL,
00071 STP_MXML_TEXT
00072 } stp_mxml_type_t;
00073
00074 typedef struct stp_mxml_attr_s
00075 {
00076 char *name;
00077 char *value;
00078 } stp_mxml_attr_t;
00079
00080 typedef struct stp_mxml_value_s
00081 {
00082 char *name;
00083 int num_attrs;
00084 stp_mxml_attr_t *attrs;
00085 } stp_mxml_element_t;
00086
00087 typedef struct stp_mxml_text_s
00088 {
00089 int whitespace;
00090 char *string;
00091 } stp_mxml_text_t;
00092
00093 typedef union stp_mxml_value_u
00094 {
00095 stp_mxml_element_t element;
00096 int integer;
00097 char *opaque;
00098 double real;
00099 stp_mxml_text_t text;
00100 } stp_mxml_value_t;
00101
00102 typedef struct stp_mxml_node_s stp_mxml_node_t;
00103
00104 struct stp_mxml_node_s
00105 {
00106 stp_mxml_type_t type;
00107 stp_mxml_node_t *next;
00108 stp_mxml_node_t *prev;
00109 stp_mxml_node_t *parent;
00110 stp_mxml_node_t *child;
00111 stp_mxml_node_t *last_child;
00112 stp_mxml_value_t value;
00113 };
00114
00115
00116
00117
00118
00119
00120 # ifdef __cplusplus
00121 extern "C" {
00122 # endif
00123
00124
00125
00126
00127
00128 extern void stp_mxmlAdd(stp_mxml_node_t *parent, int where,
00129 stp_mxml_node_t *child, stp_mxml_node_t *node);
00130 extern void stp_mxmlDelete(stp_mxml_node_t *node);
00131 extern const char *stp_mxmlElementGetAttr(stp_mxml_node_t *node, const char *name);
00132 extern void stp_mxmlElementSetAttr(stp_mxml_node_t *node, const char *name,
00133 const char *value);
00134 extern stp_mxml_node_t *stp_mxmlFindElement(stp_mxml_node_t *node, stp_mxml_node_t *top,
00135 const char *name, const char *attr,
00136 const char *value, int descend);
00137 extern stp_mxml_node_t *stp_mxmlLoadFile(stp_mxml_node_t *top, FILE *fp,
00138 stp_mxml_type_t (*cb)(stp_mxml_node_t *));
00139 extern stp_mxml_node_t *stp_mxmlLoadString(stp_mxml_node_t *top, const char *s,
00140 stp_mxml_type_t (*cb)(stp_mxml_node_t *));
00141 extern stp_mxml_node_t *stp_mxmlNewElement(stp_mxml_node_t *parent, const char *name);
00142 extern stp_mxml_node_t *stp_mxmlNewInteger(stp_mxml_node_t *parent, int integer);
00143 extern stp_mxml_node_t *stp_mxmlNewOpaque(stp_mxml_node_t *parent, const char *opaque);
00144 extern stp_mxml_node_t *stp_mxmlNewReal(stp_mxml_node_t *parent, double real);
00145 extern stp_mxml_node_t *stp_mxmlNewText(stp_mxml_node_t *parent, int whitespace,
00146 const char *string);
00147 extern void stp_mxmlRemove(stp_mxml_node_t *node);
00148 extern char *stp_mxmlSaveAllocString(stp_mxml_node_t *node,
00149 int (*cb)(stp_mxml_node_t *, int));
00150 extern int stp_mxmlSaveFile(stp_mxml_node_t *node, FILE *fp,
00151 int (*cb)(stp_mxml_node_t *, int));
00152 extern int stp_mxmlSaveString(stp_mxml_node_t *node, char *buffer,
00153 int bufsize,
00154 int (*cb)(stp_mxml_node_t *, int));
00155 extern stp_mxml_node_t *stp_mxmlWalkNext(stp_mxml_node_t *node, stp_mxml_node_t *top,
00156 int descend);
00157 extern stp_mxml_node_t *stp_mxmlWalkPrev(stp_mxml_node_t *node, stp_mxml_node_t *top,
00158 int descend);
00159
00160
00161
00162
00163
00164
00165 # ifdef __cplusplus
00166 }
00167 # endif
00168 #endif
00169
00170
00171
00172
00173