6c241a8dde906edab0fa2a2c4335226c730ce417
[platform/upstream/libxml2.git] / include / libxml / xmlIO.h
1 /*
2  * Summary: interface for the I/O interfaces used by the parser
3  * Description: interface for the I/O interfaces used by the parser
4  *
5  * Copy: See Copyright for the status of this software.
6  *
7  * Author: Daniel Veillard
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 (XMLCALL *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 * (XMLCALL *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 (XMLCALL *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 (XMLCALL *xmlInputCloseCallback) (void * context);
64
65 #ifdef LIBXML_OUTPUT_ENABLED
66 /*
67  * Those are the functions and datatypes for the library output
68  * I/O structures.
69  */
70
71 /**
72  * xmlOutputMatchCallback:
73  * @filename: the filename or URI
74  *
75  * Callback used in the I/O Output API to detect if the current handler
76  * can provide output fonctionnalities for this resource.
77  *
78  * Returns 1 if yes and 0 if another Output module should be used
79  */
80 typedef int (XMLCALL *xmlOutputMatchCallback) (char const *filename);
81 /**
82  * xmlOutputOpenCallback:
83  * @filename: the filename or URI
84  *
85  * Callback used in the I/O Output API to open the resource
86  *
87  * Returns an Output context or NULL in case or error
88  */
89 typedef void * (XMLCALL *xmlOutputOpenCallback) (char const *filename);
90 /**
91  * xmlOutputWriteCallback:
92  * @context:  an Output context
93  * @buffer:  the buffer of data to write
94  * @len:  the length of the buffer in bytes
95  *
96  * Callback used in the I/O Output API to write to the resource
97  *
98  * Returns the number of bytes written or -1 in case of error
99  */
100 typedef int (XMLCALL *xmlOutputWriteCallback) (void * context, const char * buffer,
101                                        int len);
102 /**
103  * xmlOutputCloseCallback:
104  * @context:  an Output context
105  *
106  * Callback used in the I/O Output API to close the resource
107  *
108  * Returns 0 or -1 in case of error
109  */
110 typedef int (XMLCALL *xmlOutputCloseCallback) (void * context);
111 #endif /* LIBXML_OUTPUT_ENABLED */
112
113 #ifdef __cplusplus
114 }
115 #endif
116
117 #include <libxml/globals.h>
118 #include <libxml/tree.h>
119 #include <libxml/parser.h>
120 #include <libxml/encoding.h>
121
122 #ifdef __cplusplus
123 extern "C" {
124 #endif
125 struct _xmlParserInputBuffer {
126     void*                  context;
127     xmlInputReadCallback   readcallback;
128     xmlInputCloseCallback  closecallback;
129
130     xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
131
132     xmlBufPtr buffer;    /* Local buffer encoded in UTF-8 */
133     xmlBufPtr raw;       /* if encoder != NULL buffer for raw input */
134     int compressed;         /* -1=unknown, 0=not compressed, 1=compressed */
135     int error;
136     unsigned long rawconsumed;/* amount consumed from raw */
137 };
138
139
140 #ifdef LIBXML_OUTPUT_ENABLED
141 struct _xmlOutputBuffer {
142     void*                   context;
143     xmlOutputWriteCallback  writecallback;
144     xmlOutputCloseCallback  closecallback;
145
146     xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
147
148     xmlBufPtr buffer;    /* Local buffer encoded in UTF-8 or ISOLatin */
149     xmlBufPtr conv;      /* if encoder != NULL buffer for output */
150     int written;            /* total number of byte written */
151     int error;
152 };
153 #endif /* LIBXML_OUTPUT_ENABLED */
154
155 /*
156  * Interfaces for input
157  */
158 XMLPUBFUN void XMLCALL
159         xmlCleanupInputCallbacks                (void);
160
161 XMLPUBFUN int XMLCALL
162         xmlPopInputCallbacks                    (void);
163
164 XMLPUBFUN void XMLCALL
165         xmlRegisterDefaultInputCallbacks        (void);
166 XMLPUBFUN xmlParserInputBufferPtr XMLCALL
167         xmlAllocParserInputBuffer               (xmlCharEncoding enc);
168
169 XMLPUBFUN xmlParserInputBufferPtr XMLCALL
170         xmlParserInputBufferCreateFilename      (const char *URI,
171                                                  xmlCharEncoding enc);
172 XMLPUBFUN xmlParserInputBufferPtr XMLCALL
173         xmlParserInputBufferCreateFile          (FILE *file,
174                                                  xmlCharEncoding enc);
175 XMLPUBFUN xmlParserInputBufferPtr XMLCALL
176         xmlParserInputBufferCreateFd            (int fd,
177                                                  xmlCharEncoding enc);
178 XMLPUBFUN xmlParserInputBufferPtr XMLCALL
179         xmlParserInputBufferCreateMem           (const char *mem, int size,
180                                                  xmlCharEncoding enc);
181 XMLPUBFUN xmlParserInputBufferPtr XMLCALL
182         xmlParserInputBufferCreateStatic        (const char *mem, int size,
183                                                  xmlCharEncoding enc);
184 XMLPUBFUN xmlParserInputBufferPtr XMLCALL
185         xmlParserInputBufferCreateIO            (xmlInputReadCallback   ioread,
186                                                  xmlInputCloseCallback  ioclose,
187                                                  void *ioctx,
188                                                  xmlCharEncoding enc);
189 XMLPUBFUN int XMLCALL
190         xmlParserInputBufferRead                (xmlParserInputBufferPtr in,
191                                                  int len);
192 XMLPUBFUN int XMLCALL
193         xmlParserInputBufferGrow                (xmlParserInputBufferPtr in,
194                                                  int len);
195 XMLPUBFUN int XMLCALL
196         xmlParserInputBufferPush                (xmlParserInputBufferPtr in,
197                                                  int len,
198                                                  const char *buf);
199 XMLPUBFUN void XMLCALL
200         xmlFreeParserInputBuffer                (xmlParserInputBufferPtr in);
201 XMLPUBFUN char * XMLCALL
202         xmlParserGetDirectory                   (const char *filename);
203
204 XMLPUBFUN int XMLCALL
205         xmlRegisterInputCallbacks               (xmlInputMatchCallback matchFunc,
206                                                  xmlInputOpenCallback openFunc,
207                                                  xmlInputReadCallback readFunc,
208                                                  xmlInputCloseCallback closeFunc);
209
210 xmlParserInputBufferPtr
211         __xmlParserInputBufferCreateFilename(const char *URI,
212                                                                                 xmlCharEncoding enc);
213
214 #ifdef LIBXML_OUTPUT_ENABLED
215 /*
216  * Interfaces for output
217  */
218 XMLPUBFUN void XMLCALL
219         xmlCleanupOutputCallbacks               (void);
220 XMLPUBFUN void XMLCALL
221         xmlRegisterDefaultOutputCallbacks(void);
222 XMLPUBFUN xmlOutputBufferPtr XMLCALL
223         xmlAllocOutputBuffer            (xmlCharEncodingHandlerPtr encoder);
224
225 XMLPUBFUN xmlOutputBufferPtr XMLCALL
226         xmlOutputBufferCreateFilename   (const char *URI,
227                                          xmlCharEncodingHandlerPtr encoder,
228                                          int compression);
229
230 XMLPUBFUN xmlOutputBufferPtr XMLCALL
231         xmlOutputBufferCreateFile       (FILE *file,
232                                          xmlCharEncodingHandlerPtr encoder);
233
234 XMLPUBFUN xmlOutputBufferPtr XMLCALL
235         xmlOutputBufferCreateBuffer     (xmlBufferPtr buffer,
236                                          xmlCharEncodingHandlerPtr encoder);
237
238 XMLPUBFUN xmlOutputBufferPtr XMLCALL
239         xmlOutputBufferCreateFd         (int fd,
240                                          xmlCharEncodingHandlerPtr encoder);
241
242 XMLPUBFUN xmlOutputBufferPtr XMLCALL
243         xmlOutputBufferCreateIO         (xmlOutputWriteCallback   iowrite,
244                                          xmlOutputCloseCallback  ioclose,
245                                          void *ioctx,
246                                          xmlCharEncodingHandlerPtr encoder);
247
248 /* Couple of APIs to get the output without digging into the buffers */
249 XMLPUBFUN const xmlChar * XMLCALL
250         xmlOutputBufferGetContent       (xmlOutputBufferPtr out);
251 XMLPUBFUN size_t XMLCALL
252         xmlOutputBufferGetSize          (xmlOutputBufferPtr out);
253
254 XMLPUBFUN int XMLCALL
255         xmlOutputBufferWrite            (xmlOutputBufferPtr out,
256                                          int len,
257                                          const char *buf);
258 XMLPUBFUN int XMLCALL
259         xmlOutputBufferWriteString      (xmlOutputBufferPtr out,
260                                          const char *str);
261 XMLPUBFUN int XMLCALL
262         xmlOutputBufferWriteEscape      (xmlOutputBufferPtr out,
263                                          const xmlChar *str,
264                                          xmlCharEncodingOutputFunc escaping);
265
266 XMLPUBFUN int XMLCALL
267         xmlOutputBufferFlush            (xmlOutputBufferPtr out);
268 XMLPUBFUN int XMLCALL
269         xmlOutputBufferClose            (xmlOutputBufferPtr out);
270
271 XMLPUBFUN int XMLCALL
272         xmlRegisterOutputCallbacks      (xmlOutputMatchCallback matchFunc,
273                                          xmlOutputOpenCallback openFunc,
274                                          xmlOutputWriteCallback writeFunc,
275                                          xmlOutputCloseCallback closeFunc);
276
277 xmlOutputBufferPtr
278         __xmlOutputBufferCreateFilename(const char *URI,
279                               xmlCharEncodingHandlerPtr encoder,
280                               int compression);
281
282 #ifdef LIBXML_HTTP_ENABLED
283 /*  This function only exists if HTTP support built into the library  */
284 XMLPUBFUN void XMLCALL
285         xmlRegisterHTTPPostCallbacks    (void );
286 #endif /* LIBXML_HTTP_ENABLED */
287
288 #endif /* LIBXML_OUTPUT_ENABLED */
289
290 XMLPUBFUN xmlParserInputPtr XMLCALL
291         xmlCheckHTTPInput               (xmlParserCtxtPtr ctxt,
292                                          xmlParserInputPtr ret);
293
294 /*
295  * A predefined entity loader disabling network accesses
296  */
297 XMLPUBFUN xmlParserInputPtr XMLCALL
298         xmlNoNetExternalEntityLoader    (const char *URL,
299                                          const char *ID,
300                                          xmlParserCtxtPtr ctxt);
301
302 /*
303  * xmlNormalizeWindowsPath is obsolete, don't use it.
304  * Check xmlCanonicPath in uri.h for a better alternative.
305  */
306 XMLPUBFUN xmlChar * XMLCALL
307         xmlNormalizeWindowsPath         (const xmlChar *path);
308
309 XMLPUBFUN int XMLCALL
310         xmlCheckFilename                (const char *path);
311 /**
312  * Default 'file://' protocol callbacks
313  */
314 XMLPUBFUN int XMLCALL
315         xmlFileMatch                    (const char *filename);
316 XMLPUBFUN void * XMLCALL
317         xmlFileOpen                     (const char *filename);
318 XMLPUBFUN int XMLCALL
319         xmlFileRead                     (void * context,
320                                          char * buffer,
321                                          int len);
322 XMLPUBFUN int XMLCALL
323         xmlFileClose                    (void * context);
324
325 /**
326  * Default 'http://' protocol callbacks
327  */
328 #ifdef LIBXML_HTTP_ENABLED
329 XMLPUBFUN int XMLCALL
330         xmlIOHTTPMatch                  (const char *filename);
331 XMLPUBFUN void * XMLCALL
332         xmlIOHTTPOpen                   (const char *filename);
333 #ifdef LIBXML_OUTPUT_ENABLED
334 XMLPUBFUN void * XMLCALL
335         xmlIOHTTPOpenW                  (const char * post_uri,
336                                          int   compression );
337 #endif /* LIBXML_OUTPUT_ENABLED */
338 XMLPUBFUN int XMLCALL
339         xmlIOHTTPRead                   (void * context,
340                                          char * buffer,
341                                          int len);
342 XMLPUBFUN int XMLCALL
343         xmlIOHTTPClose                  (void * context);
344 #endif /* LIBXML_HTTP_ENABLED */
345
346 /**
347  * Default 'ftp://' protocol callbacks
348  */
349 #ifdef LIBXML_FTP_ENABLED
350 XMLPUBFUN int XMLCALL
351         xmlIOFTPMatch                   (const char *filename);
352 XMLPUBFUN void * XMLCALL
353         xmlIOFTPOpen                    (const char *filename);
354 XMLPUBFUN int XMLCALL
355         xmlIOFTPRead                    (void * context,
356                                          char * buffer,
357                                          int len);
358 XMLPUBFUN int XMLCALL
359         xmlIOFTPClose                   (void * context);
360 #endif /* LIBXML_FTP_ENABLED */
361
362 #ifdef __cplusplus
363 }
364 #endif
365
366 #endif /* __XML_IO_H__ */