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__ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>