Initial revision
[TestXSLT.git] / libxml2 / include / libxml / xmlIO.h
1 /*
2  * xmlIO.h : interface for the I/O interfaces used by the parser
3  *
4  * See Copyright for the status of this software.
5  *
6  * daniel@veillard.com
7  *
8  */
9
10 #ifndef __XML_IO_H__
11 #define __XML_IO_H__
12
13 #include <stdio.h>
14 #include <libxml/xmlversion.h>
15
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19
20 /*
21  * Those are the functions and datatypes for the parser input
22  * I/O structures.
23  */
24
25 /**
26  * xmlInputMatchCallback:
27  * @filename: the filename or URI
28  *
29  * Callback used in the I/O Input API to detect if the current handler 
30  * can provide input fonctionnalities for this resource.
31  *
32  * Returns 1 if yes and 0 if another Input module should be used
33  */
34 typedef int (*xmlInputMatchCallback) (char const *filename);
35 /**
36  * xmlInputOpenCallback:
37  * @filename: the filename or URI
38  *
39  * Callback used in the I/O Input API to open the resource
40  *
41  * Returns an Input context or NULL in case or error
42  */
43 typedef void * (*xmlInputOpenCallback) (char const *filename);
44 /**
45  * xmlInputReadCallback:
46  * @context:  an Input context
47  * @buffer:  the buffer to store data read
48  * @len:  the length of the buffer in bytes
49  *
50  * Callback used in the I/O Input API to read the resource
51  *
52  * Returns the number of bytes read or -1 in case of error
53  */
54 typedef int (*xmlInputReadCallback) (void * context, char * buffer, int len);
55 /**
56  * xmlInputCloseCallback:
57  * @context:  an Input context
58  *
59  * Callback used in the I/O Input API to close the resource
60  *
61  * Returns 0 or -1 in case of error
62  */
63 typedef int (*xmlInputCloseCallback) (void * context);
64
65 /*
66  * Those are the functions and datatypes for the library output
67  * I/O structures.
68  */
69
70 /**
71  * xmlOutputMatchCallback:
72  * @filename: the filename or URI
73  *
74  * Callback used in the I/O Output API to detect if the current handler 
75  * can provide output fonctionnalities for this resource.
76  *
77  * Returns 1 if yes and 0 if another Output module should be used
78  */
79 typedef int (*xmlOutputMatchCallback) (char const *filename);
80 /**
81  * xmlOutputOpenCallback:
82  * @filename: the filename or URI
83  *
84  * Callback used in the I/O Output API to open the resource
85  *
86  * Returns an Output context or NULL in case or error
87  */
88 typedef void * (*xmlOutputOpenCallback) (char const *filename);
89 /**
90  * xmlOutputWriteCallback:
91  * @context:  an Output context
92  * @buffer:  the buffer of data to write
93  * @len:  the length of the buffer in bytes
94  *
95  * Callback used in the I/O Output API to write to the resource
96  *
97  * Returns the number of bytes written or -1 in case of error
98  */
99 typedef int (*xmlOutputWriteCallback) (void * context, const char * buffer,
100                                        int len);
101 /**
102  * xmlOutputCloseCallback:
103  * @context:  an Output context
104  *
105  * Callback used in the I/O Output API to close the resource
106  *
107  * Returns 0 or -1 in case of error
108  */
109 typedef int (*xmlOutputCloseCallback) (void * context);
110
111 #ifdef __cplusplus
112 }
113 #endif
114
115 #include <libxml/globals.h>
116 #include <libxml/tree.h>
117 #include <libxml/parser.h>
118 #include <libxml/encoding.h>
119
120 #ifdef __cplusplus
121 extern "C" {
122 #endif
123 struct _xmlParserInputBuffer {
124     void*                  context;
125     xmlInputReadCallback   readcallback;
126     xmlInputCloseCallback  closecallback;
127     
128     xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
129     
130     xmlBufferPtr buffer;    /* Local buffer encoded in UTF-8 */
131     xmlBufferPtr raw;       /* if encoder != NULL buffer for raw input */
132 };
133
134
135 struct _xmlOutputBuffer {
136     void*                   context;
137     xmlOutputWriteCallback  writecallback;
138     xmlOutputCloseCallback  closecallback;
139     
140     xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
141     
142     xmlBufferPtr buffer;    /* Local buffer encoded in UTF-8 or ISOLatin */
143     xmlBufferPtr conv;      /* if encoder != NULL buffer for output */
144     int written;            /* total number of byte written */
145 };
146
147 /*
148  * Interfaces for input
149  */
150 void    xmlCleanupInputCallbacks                (void);
151 void    xmlCleanupOutputCallbacks               (void);
152
153 void    xmlRegisterDefaultInputCallbacks        (void);
154 xmlParserInputBufferPtr
155         xmlAllocParserInputBuffer               (xmlCharEncoding enc);
156
157 xmlParserInputBufferPtr
158         xmlParserInputBufferCreateFilename      (const char *URI,
159                                                  xmlCharEncoding enc);
160 xmlParserInputBufferPtr
161         xmlParserInputBufferCreateFile          (FILE *file,
162                                                  xmlCharEncoding enc);
163 xmlParserInputBufferPtr
164         xmlParserInputBufferCreateFd            (int fd,
165                                                  xmlCharEncoding enc);
166 xmlParserInputBufferPtr
167         xmlParserInputBufferCreateMem           (const char *mem, int size,
168                                                  xmlCharEncoding enc);
169 xmlParserInputBufferPtr
170         xmlParserInputBufferCreateIO            (xmlInputReadCallback   ioread,
171                                                  xmlInputCloseCallback  ioclose,
172                                                  void *ioctx,
173                                                  xmlCharEncoding enc);
174 int     xmlParserInputBufferRead                (xmlParserInputBufferPtr in,
175                                                  int len);
176 int     xmlParserInputBufferGrow                (xmlParserInputBufferPtr in,
177                                                  int len);
178 int     xmlParserInputBufferPush                (xmlParserInputBufferPtr in,
179                                                  int len,
180                                                  const char *buf);
181 void    xmlFreeParserInputBuffer                (xmlParserInputBufferPtr in);
182 char *  xmlParserGetDirectory                   (const char *filename);
183
184 int     xmlRegisterInputCallbacks               (xmlInputMatchCallback matchFunc,
185                                                  xmlInputOpenCallback openFunc,
186                                                  xmlInputReadCallback readFunc,
187                                                  xmlInputCloseCallback closeFunc);
188 /*
189  * Interfaces for output
190  */
191 void    xmlRegisterDefaultOutputCallbacks(void);
192 xmlOutputBufferPtr
193         xmlAllocOutputBuffer            (xmlCharEncodingHandlerPtr encoder);
194
195 xmlOutputBufferPtr
196         xmlOutputBufferCreateFilename   (const char *URI,
197                                          xmlCharEncodingHandlerPtr encoder,
198                                          int compression);
199
200 xmlOutputBufferPtr
201         xmlOutputBufferCreateFile       (FILE *file,
202                                          xmlCharEncodingHandlerPtr encoder);
203
204 xmlOutputBufferPtr
205         xmlOutputBufferCreateFd         (int fd,
206                                          xmlCharEncodingHandlerPtr encoder);
207
208 xmlOutputBufferPtr
209         xmlOutputBufferCreateIO         (xmlOutputWriteCallback   iowrite,
210                                          xmlOutputCloseCallback  ioclose,
211                                          void *ioctx,
212                                          xmlCharEncodingHandlerPtr encoder);
213
214 int     xmlOutputBufferWrite            (xmlOutputBufferPtr out,
215                                          int len,
216                                          const char *buf);
217 int     xmlOutputBufferWriteString      (xmlOutputBufferPtr out,
218                                          const char *str);
219
220 int     xmlOutputBufferFlush            (xmlOutputBufferPtr out);
221 int     xmlOutputBufferClose            (xmlOutputBufferPtr out);
222
223 int     xmlRegisterOutputCallbacks      (xmlOutputMatchCallback matchFunc,
224                                          xmlOutputOpenCallback openFunc,
225                                          xmlOutputWriteCallback writeFunc,
226                                          xmlOutputCloseCallback closeFunc);
227
228 /*  This function only exists if HTTP support built into the library  */
229 #ifdef LIBXML_HTTP_ENABLED
230 void *  xmlIOHTTPOpenW                  (const char * post_uri,
231                                          int   compression );
232 void    xmlRegisterHTTPPostCallbacks    (void );
233 #endif
234
235 /*
236  * A predefined entity loader disabling network accesses
237  */
238 xmlParserInputPtr xmlNoNetExternalEntityLoader(const char *URL,
239                                          const char *ID,
240                                          xmlParserCtxtPtr ctxt);
241
242 /* 
243  * xmlNormalizeWindowsPath is obsolete, don't use it. 
244  * Check xmlCanonicPath in uri.h for a better alternative.
245  */
246 xmlChar * xmlNormalizeWindowsPath       (const xmlChar *path);
247
248 int     xmlCheckFilename                (const char *path);
249 /**
250  * Default 'file://' protocol callbacks 
251  */
252 int     xmlFileMatch                    (const char *filename);
253 void *  xmlFileOpen                     (const char *filename);
254 int     xmlFileRead                     (void * context, 
255                                          char * buffer, 
256                                          int len);
257 int     xmlFileClose                    (void * context);
258
259 /**
260  * Default 'http://' protocol callbacks 
261  */
262 #ifdef LIBXML_HTTP_ENABLED
263 int     xmlIOHTTPMatch                  (const char *filename);
264 void *  xmlIOHTTPOpen                   (const char *filename);
265 int     xmlIOHTTPRead                   (void * context, 
266                                          char * buffer, 
267                                          int len);
268 int     xmlIOHTTPClose                  (void * context);
269 #endif /* LIBXML_HTTP_ENABLED */
270
271 /**
272  * Default 'ftp://' protocol callbacks 
273  */
274 #ifdef LIBXML_FTP_ENABLED 
275 int     xmlIOFTPMatch                   (const char *filename);
276 void *  xmlIOFTPOpen                    (const char *filename);
277 int     xmlIOFTPRead                    (void * context, 
278                                          char * buffer, 
279                                          int len);
280 int     xmlIOFTPClose                   (void * context);
281 #endif /* LIBXML_FTP_ENABLED */
282
283 #ifdef __cplusplus
284 }
285 #endif
286
287 #endif /* __XML_IO_H__ */