Reactos
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#include <libxml/encoding.h>
16#define XML_TREE_INTERNALS
17#include <libxml/tree.h>
18#undef XML_TREE_INTERNALS
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24/*
25 * Those are the functions and datatypes for the parser input
26 * I/O structures.
27 */
28
29/**
30 * xmlInputMatchCallback:
31 * @filename: the filename or URI
32 *
33 * Callback used in the I/O Input API to detect if the current handler
34 * can provide input functionality for this resource.
35 *
36 * Returns 1 if yes and 0 if another Input module should be used
37 */
38typedef int (*xmlInputMatchCallback) (char const *filename);
39/**
40 * xmlInputOpenCallback:
41 * @filename: the filename or URI
42 *
43 * Callback used in the I/O Input API to open the resource
44 *
45 * Returns an Input context or NULL in case or error
46 */
47typedef void * (*xmlInputOpenCallback) (char const *filename);
48/**
49 * xmlInputReadCallback:
50 * @context: an Input context
51 * @buffer: the buffer to store data read
52 * @len: the length of the buffer in bytes
53 *
54 * Callback used in the I/O Input API to read the resource
55 *
56 * Returns the number of bytes read or -1 in case of error
57 */
58typedef int (*xmlInputReadCallback) (void * context, char * buffer, int len);
59/**
60 * xmlInputCloseCallback:
61 * @context: an Input context
62 *
63 * Callback used in the I/O Input API to close the resource
64 *
65 * Returns 0 or -1 in case of error
66 */
67typedef int (*xmlInputCloseCallback) (void * context);
68
69#ifdef LIBXML_OUTPUT_ENABLED
70/*
71 * Those are the functions and datatypes for the library output
72 * I/O structures.
73 */
74
75/**
76 * xmlOutputMatchCallback:
77 * @filename: the filename or URI
78 *
79 * Callback used in the I/O Output API to detect if the current handler
80 * can provide output functionality for this resource.
81 *
82 * Returns 1 if yes and 0 if another Output module should be used
83 */
84typedef int (*xmlOutputMatchCallback) (char const *filename);
85/**
86 * xmlOutputOpenCallback:
87 * @filename: the filename or URI
88 *
89 * Callback used in the I/O Output API to open the resource
90 *
91 * Returns an Output context or NULL in case or error
92 */
93typedef void * (*xmlOutputOpenCallback) (char const *filename);
94/**
95 * xmlOutputWriteCallback:
96 * @context: an Output context
97 * @buffer: the buffer of data to write
98 * @len: the length of the buffer in bytes
99 *
100 * Callback used in the I/O Output API to write to the resource
101 *
102 * Returns the number of bytes written or -1 in case of error
103 */
104typedef int (*xmlOutputWriteCallback) (void * context, const char * buffer,
105 int len);
106/**
107 * xmlOutputCloseCallback:
108 * @context: an Output context
109 *
110 * Callback used in the I/O Output API to close the resource
111 *
112 * Returns 0 or -1 in case of error
113 */
114typedef int (*xmlOutputCloseCallback) (void * context);
115#endif /* LIBXML_OUTPUT_ENABLED */
116
117/**
118 * xmlParserInputBufferCreateFilenameFunc:
119 * @URI: the URI to read from
120 * @enc: the requested source encoding
121 *
122 * Signature for the function doing the lookup for a suitable input method
123 * corresponding to an URI.
124 *
125 * Returns the new xmlParserInputBufferPtr in case of success or NULL if no
126 * method was found.
127 */
128typedef xmlParserInputBufferPtr
129(*xmlParserInputBufferCreateFilenameFunc)(const char *URI, xmlCharEncoding enc);
130
131/**
132 * xmlOutputBufferCreateFilenameFunc:
133 * @URI: the URI to write to
134 * @enc: the requested target encoding
135 *
136 * Signature for the function doing the lookup for a suitable output method
137 * corresponding to an URI.
138 *
139 * Returns the new xmlOutputBufferPtr in case of success or NULL if no
140 * method was found.
141 */
142typedef xmlOutputBufferPtr
143(*xmlOutputBufferCreateFilenameFunc)(const char *URI,
144 xmlCharEncodingHandlerPtr encoder, int compression);
145
146struct _xmlParserInputBuffer {
147 void* context;
148 xmlInputReadCallback readcallback;
149 xmlInputCloseCallback closecallback;
150
151 xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
152
153 xmlBufPtr buffer; /* Local buffer encoded in UTF-8 */
154 xmlBufPtr raw; /* if encoder != NULL buffer for raw input */
155 int compressed; /* -1=unknown, 0=not compressed, 1=compressed */
156 int error;
157 unsigned long rawconsumed;/* amount consumed from raw */
158};
159
160
161#ifdef LIBXML_OUTPUT_ENABLED
162struct _xmlOutputBuffer {
163 void* context;
164 xmlOutputWriteCallback writecallback;
165 xmlOutputCloseCallback closecallback;
166
167 xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
168
169 xmlBufPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */
170 xmlBufPtr conv; /* if encoder != NULL buffer for output */
171 int written; /* total number of byte written */
172 int error;
173};
174#endif /* LIBXML_OUTPUT_ENABLED */
175
176/** DOC_DISABLE */
177#define XML_GLOBALS_IO \
178 XML_OP(xmlParserInputBufferCreateFilenameValue, \
179 xmlParserInputBufferCreateFilenameFunc, XML_DEPRECATED) \
180 XML_OP(xmlOutputBufferCreateFilenameValue, \
181 xmlOutputBufferCreateFilenameFunc, XML_DEPRECATED)
182
183#define XML_OP XML_DECLARE_GLOBAL
184XML_GLOBALS_IO
185#undef XML_OP
186
187#if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION)
188 #define xmlParserInputBufferCreateFilenameValue \
189 XML_GLOBAL_MACRO(xmlParserInputBufferCreateFilenameValue)
190 #define xmlOutputBufferCreateFilenameValue \
191 XML_GLOBAL_MACRO(xmlOutputBufferCreateFilenameValue)
192#endif
193/** DOC_ENABLE */
194
195/*
196 * Interfaces for input
197 */
198XMLPUBFUN void
199 xmlCleanupInputCallbacks (void);
200
201XMLPUBFUN int
202 xmlPopInputCallbacks (void);
203
204XMLPUBFUN void
205 xmlRegisterDefaultInputCallbacks (void);
206XMLPUBFUN xmlParserInputBufferPtr
207 xmlAllocParserInputBuffer (xmlCharEncoding enc);
208
209XMLPUBFUN xmlParserInputBufferPtr
210 xmlParserInputBufferCreateFilename (const char *URI,
211 xmlCharEncoding enc);
212XMLPUBFUN xmlParserInputBufferPtr
213 xmlParserInputBufferCreateFile (FILE *file,
214 xmlCharEncoding enc);
215XMLPUBFUN xmlParserInputBufferPtr
216 xmlParserInputBufferCreateFd (int fd,
217 xmlCharEncoding enc);
218XMLPUBFUN xmlParserInputBufferPtr
219 xmlParserInputBufferCreateMem (const char *mem, int size,
220 xmlCharEncoding enc);
221XMLPUBFUN xmlParserInputBufferPtr
222 xmlParserInputBufferCreateStatic (const char *mem, int size,
223 xmlCharEncoding enc);
224XMLPUBFUN xmlParserInputBufferPtr
225 xmlParserInputBufferCreateIO (xmlInputReadCallback ioread,
226 xmlInputCloseCallback ioclose,
227 void *ioctx,
228 xmlCharEncoding enc);
229XMLPUBFUN int
230 xmlParserInputBufferRead (xmlParserInputBufferPtr in,
231 int len);
232XMLPUBFUN int
233 xmlParserInputBufferGrow (xmlParserInputBufferPtr in,
234 int len);
235XMLPUBFUN int
236 xmlParserInputBufferPush (xmlParserInputBufferPtr in,
237 int len,
238 const char *buf);
239XMLPUBFUN void
240 xmlFreeParserInputBuffer (xmlParserInputBufferPtr in);
241XMLPUBFUN char *
242 xmlParserGetDirectory (const char *filename);
243
244XMLPUBFUN int
245 xmlRegisterInputCallbacks (xmlInputMatchCallback matchFunc,
246 xmlInputOpenCallback openFunc,
247 xmlInputReadCallback readFunc,
248 xmlInputCloseCallback closeFunc);
249
250xmlParserInputBufferPtr
251 __xmlParserInputBufferCreateFilename(const char *URI,
252 xmlCharEncoding enc);
253
254#ifdef LIBXML_OUTPUT_ENABLED
255/*
256 * Interfaces for output
257 */
258XMLPUBFUN void
259 xmlCleanupOutputCallbacks (void);
260XMLPUBFUN int
261 xmlPopOutputCallbacks (void);
262XMLPUBFUN void
263 xmlRegisterDefaultOutputCallbacks(void);
264XMLPUBFUN xmlOutputBufferPtr
265 xmlAllocOutputBuffer (xmlCharEncodingHandlerPtr encoder);
266
267XMLPUBFUN xmlOutputBufferPtr
268 xmlOutputBufferCreateFilename (const char *URI,
269 xmlCharEncodingHandlerPtr encoder,
270 int compression);
271
272XMLPUBFUN xmlOutputBufferPtr
273 xmlOutputBufferCreateFile (FILE *file,
274 xmlCharEncodingHandlerPtr encoder);
275
276XMLPUBFUN xmlOutputBufferPtr
277 xmlOutputBufferCreateBuffer (xmlBufferPtr buffer,
278 xmlCharEncodingHandlerPtr encoder);
279
280XMLPUBFUN xmlOutputBufferPtr
281 xmlOutputBufferCreateFd (int fd,
282 xmlCharEncodingHandlerPtr encoder);
283
284XMLPUBFUN xmlOutputBufferPtr
285 xmlOutputBufferCreateIO (xmlOutputWriteCallback iowrite,
286 xmlOutputCloseCallback ioclose,
287 void *ioctx,
288 xmlCharEncodingHandlerPtr encoder);
289
290/* Couple of APIs to get the output without digging into the buffers */
291XMLPUBFUN const xmlChar *
292 xmlOutputBufferGetContent (xmlOutputBufferPtr out);
293XMLPUBFUN size_t
294 xmlOutputBufferGetSize (xmlOutputBufferPtr out);
295
296XMLPUBFUN int
297 xmlOutputBufferWrite (xmlOutputBufferPtr out,
298 int len,
299 const char *buf);
300XMLPUBFUN int
301 xmlOutputBufferWriteString (xmlOutputBufferPtr out,
302 const char *str);
303XMLPUBFUN int
304 xmlOutputBufferWriteEscape (xmlOutputBufferPtr out,
305 const xmlChar *str,
306 xmlCharEncodingOutputFunc escaping);
307
308XMLPUBFUN int
309 xmlOutputBufferFlush (xmlOutputBufferPtr out);
310XMLPUBFUN int
311 xmlOutputBufferClose (xmlOutputBufferPtr out);
312
313XMLPUBFUN int
314 xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc,
315 xmlOutputOpenCallback openFunc,
316 xmlOutputWriteCallback writeFunc,
317 xmlOutputCloseCallback closeFunc);
318
319xmlOutputBufferPtr
320 __xmlOutputBufferCreateFilename(const char *URI,
321 xmlCharEncodingHandlerPtr encoder,
322 int compression);
323
324#ifdef LIBXML_HTTP_ENABLED
325/* This function only exists if HTTP support built into the library */
326XMLPUBFUN void
327 xmlRegisterHTTPPostCallbacks (void );
328#endif /* LIBXML_HTTP_ENABLED */
329
330#endif /* LIBXML_OUTPUT_ENABLED */
331
332XMLPUBFUN xmlParserInputPtr
333 xmlCheckHTTPInput (xmlParserCtxtPtr ctxt,
334 xmlParserInputPtr ret);
335
336/*
337 * A predefined entity loader disabling network accesses
338 */
339XMLPUBFUN xmlParserInputPtr
340 xmlNoNetExternalEntityLoader (const char *URL,
341 const char *ID,
342 xmlParserCtxtPtr ctxt);
343
344/*
345 * xmlNormalizeWindowsPath is obsolete, don't use it.
346 * Check xmlCanonicPath in uri.h for a better alternative.
347 */
348XMLPUBFUN xmlChar *
349 xmlNormalizeWindowsPath (const xmlChar *path);
350
351XMLPUBFUN int
352 xmlCheckFilename (const char *path);
353/**
354 * Default 'file://' protocol callbacks
355 */
356XMLPUBFUN int
357 xmlFileMatch (const char *filename);
358XMLPUBFUN void *
359 xmlFileOpen (const char *filename);
360XMLPUBFUN int
361 xmlFileRead (void * context,
362 char * buffer,
363 int len);
364XMLPUBFUN int
365 xmlFileClose (void * context);
366
367/**
368 * Default 'http://' protocol callbacks
369 */
370#ifdef LIBXML_HTTP_ENABLED
371XMLPUBFUN int
372 xmlIOHTTPMatch (const char *filename);
373XMLPUBFUN void *
374 xmlIOHTTPOpen (const char *filename);
375#ifdef LIBXML_OUTPUT_ENABLED
376XMLPUBFUN void *
377 xmlIOHTTPOpenW (const char * post_uri,
378 int compression );
379#endif /* LIBXML_OUTPUT_ENABLED */
380XMLPUBFUN int
381 xmlIOHTTPRead (void * context,
382 char * buffer,
383 int len);
384XMLPUBFUN int
385 xmlIOHTTPClose (void * context);
386#endif /* LIBXML_HTTP_ENABLED */
387
388/**
389 * Default 'ftp://' protocol callbacks
390 */
391#if defined(LIBXML_FTP_ENABLED)
392XMLPUBFUN int
393 xmlIOFTPMatch (const char *filename);
394XMLPUBFUN void *
395 xmlIOFTPOpen (const char *filename);
396XMLPUBFUN int
397 xmlIOFTPRead (void * context,
398 char * buffer,
399 int len);
400XMLPUBFUN int
401 xmlIOFTPClose (void * context);
402#endif /* defined(LIBXML_FTP_ENABLED) */
403
404XMLPUBFUN xmlParserInputBufferCreateFilenameFunc
405 xmlParserInputBufferCreateFilenameDefault(
406 xmlParserInputBufferCreateFilenameFunc func);
407XMLPUBFUN xmlOutputBufferCreateFilenameFunc
408 xmlOutputBufferCreateFilenameDefault(
409 xmlOutputBufferCreateFilenameFunc func);
410XMLPUBFUN xmlOutputBufferCreateFilenameFunc
411 xmlThrDefOutputBufferCreateFilenameDefault(
412 xmlOutputBufferCreateFilenameFunc func);
413XMLPUBFUN xmlParserInputBufferCreateFilenameFunc
414 xmlThrDefParserInputBufferCreateFilenameDefault(
415 xmlParserInputBufferCreateFilenameFunc func);
416
417#ifdef __cplusplus
418}
419#endif
420
421#endif /* __XML_IO_H__ */