1 /*
2  * Summary: text writing API for XML
3  * Description: text writing API for XML
4  *
5  * Copy: See Copyright for the status of this software.
6  *
7  * Author: Alfred Mickautsch <alfred@mickautsch.de>
8  */
9 
10 #ifndef __XML_XMLWRITER_H__
11 #define __XML_XMLWRITER_H__
12 
13 #include <libxml/xmlversion.h>
14 
15 #ifdef LIBXML_WRITER_ENABLED
16 
17 #include <stdarg.h>
18 #include <libxml/xmlIO.h>
19 #include <libxml/list.h>
20 #include <libxml/xmlstring.h>
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26     typedef struct _xmlTextWriter xmlTextWriter;
27     typedef xmlTextWriter *xmlTextWriterPtr;
28 
29 /*
30  * Constructors & Destructor
31  */
32     XMLPUBFUN xmlTextWriterPtr XMLCALL
33         xmlNewTextWriter(xmlOutputBufferPtr out);
34     XMLPUBFUN xmlTextWriterPtr XMLCALL
35         xmlNewTextWriterFilename(const char *uri, int compression);
36     XMLPUBFUN xmlTextWriterPtr XMLCALL
37         xmlNewTextWriterMemory(xmlBufferPtr buf, int compression);
38     XMLPUBFUN xmlTextWriterPtr XMLCALL
39         xmlNewTextWriterPushParser(xmlParserCtxtPtr ctxt, int compression);
40     XMLPUBFUN xmlTextWriterPtr XMLCALL
41         xmlNewTextWriterDoc(xmlDocPtr * doc, int compression);
42     XMLPUBFUN xmlTextWriterPtr XMLCALL
43         xmlNewTextWriterTree(xmlDocPtr doc, xmlNodePtr node,
44                              int compression);
45     XMLPUBFUN void XMLCALL xmlFreeTextWriter(xmlTextWriterPtr writer);
46 
47 /*
48  * Functions
49  */
50 
51 
52 /*
53  * Document
54  */
55     XMLPUBFUN int XMLCALL
56         xmlTextWriterStartDocument(xmlTextWriterPtr writer,
57                                    const char *version,
58                                    const char *encoding,
59                                    const char *standalone);
60     XMLPUBFUN int XMLCALL xmlTextWriterEndDocument(xmlTextWriterPtr
61                                                    writer);
62 
63 /*
64  * Comments
65  */
66     XMLPUBFUN int XMLCALL xmlTextWriterStartComment(xmlTextWriterPtr
67                                                     writer);
68     XMLPUBFUN int XMLCALL xmlTextWriterEndComment(xmlTextWriterPtr writer);
69     XMLPUBFUN int XMLCALL
70         xmlTextWriterWriteFormatComment(xmlTextWriterPtr writer,
71                                         const char *format, ...)
72 					LIBXML_ATTR_FORMAT(2,3);
73     XMLPUBFUN int XMLCALL
74         xmlTextWriterWriteVFormatComment(xmlTextWriterPtr writer,
75                                          const char *format,
76                                          va_list argptr)
77 					 LIBXML_ATTR_FORMAT(2,0);
78     XMLPUBFUN int XMLCALL xmlTextWriterWriteComment(xmlTextWriterPtr
79                                                     writer,
80                                                     const xmlChar *
81                                                     content);
82 
83 /*
84  * Elements
85  */
86     XMLPUBFUN int XMLCALL
87         xmlTextWriterStartElement(xmlTextWriterPtr writer,
88                                   const xmlChar * name);
89     XMLPUBFUN int XMLCALL xmlTextWriterStartElementNS(xmlTextWriterPtr
90                                                       writer,
91                                                       const xmlChar *
92                                                       prefix,
93                                                       const xmlChar * name,
94                                                       const xmlChar *
95                                                       namespaceURI);
96     XMLPUBFUN int XMLCALL xmlTextWriterEndElement(xmlTextWriterPtr writer);
97     XMLPUBFUN int XMLCALL xmlTextWriterFullEndElement(xmlTextWriterPtr
98                                                       writer);
99 
100 /*
101  * Elements conveniency functions
102  */
103     XMLPUBFUN int XMLCALL
104         xmlTextWriterWriteFormatElement(xmlTextWriterPtr writer,
105                                         const xmlChar * name,
106                                         const char *format, ...)
107 					LIBXML_ATTR_FORMAT(3,4);
108     XMLPUBFUN int XMLCALL
109         xmlTextWriterWriteVFormatElement(xmlTextWriterPtr writer,
110                                          const xmlChar * name,
111                                          const char *format,
112                                          va_list argptr)
113 					 LIBXML_ATTR_FORMAT(3,0);
114     XMLPUBFUN int XMLCALL xmlTextWriterWriteElement(xmlTextWriterPtr
115                                                     writer,
116                                                     const xmlChar * name,
117                                                     const xmlChar *
118                                                     content);
119     XMLPUBFUN int XMLCALL
120         xmlTextWriterWriteFormatElementNS(xmlTextWriterPtr writer,
121                                           const xmlChar * prefix,
122                                           const xmlChar * name,
123                                           const xmlChar * namespaceURI,
124                                           const char *format, ...)
125 					  LIBXML_ATTR_FORMAT(5,6);
126     XMLPUBFUN int XMLCALL
127         xmlTextWriterWriteVFormatElementNS(xmlTextWriterPtr writer,
128                                            const xmlChar * prefix,
129                                            const xmlChar * name,
130                                            const xmlChar * namespaceURI,
131                                            const char *format,
132                                            va_list argptr)
133 					   LIBXML_ATTR_FORMAT(5,0);
134     XMLPUBFUN int XMLCALL xmlTextWriterWriteElementNS(xmlTextWriterPtr
135                                                       writer,
136                                                       const xmlChar *
137                                                       prefix,
138                                                       const xmlChar * name,
139                                                       const xmlChar *
140                                                       namespaceURI,
141                                                       const xmlChar *
142                                                       content);
143 
144 /*
145  * Text
146  */
147     XMLPUBFUN int XMLCALL
148         xmlTextWriterWriteFormatRaw(xmlTextWriterPtr writer,
149                                     const char *format, ...)
150 				    LIBXML_ATTR_FORMAT(2,3);
151     XMLPUBFUN int XMLCALL
152         xmlTextWriterWriteVFormatRaw(xmlTextWriterPtr writer,
153                                      const char *format, va_list argptr)
154 				     LIBXML_ATTR_FORMAT(2,0);
155     XMLPUBFUN int XMLCALL
156         xmlTextWriterWriteRawLen(xmlTextWriterPtr writer,
157                                  const xmlChar * content, int len);
158     XMLPUBFUN int XMLCALL
159         xmlTextWriterWriteRaw(xmlTextWriterPtr writer,
160                               const xmlChar * content);
161     XMLPUBFUN int XMLCALL xmlTextWriterWriteFormatString(xmlTextWriterPtr
162                                                          writer,
163                                                          const char
164                                                          *format, ...)
165 							 LIBXML_ATTR_FORMAT(2,3);
166     XMLPUBFUN int XMLCALL xmlTextWriterWriteVFormatString(xmlTextWriterPtr
167                                                           writer,
168                                                           const char
169                                                           *format,
170                                                           va_list argptr)
171 							  LIBXML_ATTR_FORMAT(2,0);
172     XMLPUBFUN int XMLCALL xmlTextWriterWriteString(xmlTextWriterPtr writer,
173                                                    const xmlChar *
174                                                    content);
175     XMLPUBFUN int XMLCALL xmlTextWriterWriteBase64(xmlTextWriterPtr writer,
176                                                    const char *data,
177                                                    int start, int len);
178     XMLPUBFUN int XMLCALL xmlTextWriterWriteBinHex(xmlTextWriterPtr writer,
179                                                    const char *data,
180                                                    int start, int len);
181 
182 /*
183  * Attributes
184  */
185     XMLPUBFUN int XMLCALL
186         xmlTextWriterStartAttribute(xmlTextWriterPtr writer,
187                                     const xmlChar * name);
188     XMLPUBFUN int XMLCALL xmlTextWriterStartAttributeNS(xmlTextWriterPtr
189                                                         writer,
190                                                         const xmlChar *
191                                                         prefix,
192                                                         const xmlChar *
193                                                         name,
194                                                         const xmlChar *
195                                                         namespaceURI);
196     XMLPUBFUN int XMLCALL xmlTextWriterEndAttribute(xmlTextWriterPtr
197                                                     writer);
198 
199 /*
200  * Attributes conveniency functions
201  */
202     XMLPUBFUN int XMLCALL
203         xmlTextWriterWriteFormatAttribute(xmlTextWriterPtr writer,
204                                           const xmlChar * name,
205                                           const char *format, ...)
206 					  LIBXML_ATTR_FORMAT(3,4);
207     XMLPUBFUN int XMLCALL
208         xmlTextWriterWriteVFormatAttribute(xmlTextWriterPtr writer,
209                                            const xmlChar * name,
210                                            const char *format,
211                                            va_list argptr)
212 					   LIBXML_ATTR_FORMAT(3,0);
213     XMLPUBFUN int XMLCALL xmlTextWriterWriteAttribute(xmlTextWriterPtr
214                                                       writer,
215                                                       const xmlChar * name,
216                                                       const xmlChar *
217                                                       content);
218     XMLPUBFUN int XMLCALL
219         xmlTextWriterWriteFormatAttributeNS(xmlTextWriterPtr writer,
220                                             const xmlChar * prefix,
221                                             const xmlChar * name,
222                                             const xmlChar * namespaceURI,
223                                             const char *format, ...)
224 					    LIBXML_ATTR_FORMAT(5,6);
225     XMLPUBFUN int XMLCALL
226         xmlTextWriterWriteVFormatAttributeNS(xmlTextWriterPtr writer,
227                                              const xmlChar * prefix,
228                                              const xmlChar * name,
229                                              const xmlChar * namespaceURI,
230                                              const char *format,
231                                              va_list argptr)
232 					     LIBXML_ATTR_FORMAT(5,0);
233     XMLPUBFUN int XMLCALL xmlTextWriterWriteAttributeNS(xmlTextWriterPtr
234                                                         writer,
235                                                         const xmlChar *
236                                                         prefix,
237                                                         const xmlChar *
238                                                         name,
239                                                         const xmlChar *
240                                                         namespaceURI,
241                                                         const xmlChar *
242                                                         content);
243 
244 /*
245  * PI's
246  */
247     XMLPUBFUN int XMLCALL
248         xmlTextWriterStartPI(xmlTextWriterPtr writer,
249                              const xmlChar * target);
250     XMLPUBFUN int XMLCALL xmlTextWriterEndPI(xmlTextWriterPtr writer);
251 
252 /*
253  * PI conveniency functions
254  */
255     XMLPUBFUN int XMLCALL
256         xmlTextWriterWriteFormatPI(xmlTextWriterPtr writer,
257                                    const xmlChar * target,
258                                    const char *format, ...)
259 				   LIBXML_ATTR_FORMAT(3,4);
260     XMLPUBFUN int XMLCALL
261         xmlTextWriterWriteVFormatPI(xmlTextWriterPtr writer,
262                                     const xmlChar * target,
263                                     const char *format, va_list argptr)
264 				    LIBXML_ATTR_FORMAT(3,0);
265     XMLPUBFUN int XMLCALL
266         xmlTextWriterWritePI(xmlTextWriterPtr writer,
267                              const xmlChar * target,
268                              const xmlChar * content);
269 
270 /**
271  * xmlTextWriterWriteProcessingInstruction:
272  *
273  * This macro maps to xmlTextWriterWritePI
274  */
275 #define xmlTextWriterWriteProcessingInstruction xmlTextWriterWritePI
276 
277 /*
278  * CDATA
279  */
280     XMLPUBFUN int XMLCALL xmlTextWriterStartCDATA(xmlTextWriterPtr writer);
281     XMLPUBFUN int XMLCALL xmlTextWriterEndCDATA(xmlTextWriterPtr writer);
282 
283 /*
284  * CDATA conveniency functions
285  */
286     XMLPUBFUN int XMLCALL
287         xmlTextWriterWriteFormatCDATA(xmlTextWriterPtr writer,
288                                       const char *format, ...)
289 				      LIBXML_ATTR_FORMAT(2,3);
290     XMLPUBFUN int XMLCALL
291         xmlTextWriterWriteVFormatCDATA(xmlTextWriterPtr writer,
292                                        const char *format, va_list argptr)
293 				       LIBXML_ATTR_FORMAT(2,0);
294     XMLPUBFUN int XMLCALL
295         xmlTextWriterWriteCDATA(xmlTextWriterPtr writer,
296                                 const xmlChar * content);
297 
298 /*
299  * DTD
300  */
301     XMLPUBFUN int XMLCALL
302         xmlTextWriterStartDTD(xmlTextWriterPtr writer,
303                               const xmlChar * name,
304                               const xmlChar * pubid,
305                               const xmlChar * sysid);
306     XMLPUBFUN int XMLCALL xmlTextWriterEndDTD(xmlTextWriterPtr writer);
307 
308 /*
309  * DTD conveniency functions
310  */
311     XMLPUBFUN int XMLCALL
312         xmlTextWriterWriteFormatDTD(xmlTextWriterPtr writer,
313                                     const xmlChar * name,
314                                     const xmlChar * pubid,
315                                     const xmlChar * sysid,
316                                     const char *format, ...)
317 				    LIBXML_ATTR_FORMAT(5,6);
318     XMLPUBFUN int XMLCALL
319         xmlTextWriterWriteVFormatDTD(xmlTextWriterPtr writer,
320                                      const xmlChar * name,
321                                      const xmlChar * pubid,
322                                      const xmlChar * sysid,
323                                      const char *format, va_list argptr)
324 				     LIBXML_ATTR_FORMAT(5,0);
325     XMLPUBFUN int XMLCALL
326         xmlTextWriterWriteDTD(xmlTextWriterPtr writer,
327                               const xmlChar * name,
328                               const xmlChar * pubid,
329                               const xmlChar * sysid,
330                               const xmlChar * subset);
331 
332 /**
333  * xmlTextWriterWriteDocType:
334  *
335  * this macro maps to xmlTextWriterWriteDTD
336  */
337 #define xmlTextWriterWriteDocType xmlTextWriterWriteDTD
338 
339 /*
340  * DTD element definition
341  */
342     XMLPUBFUN int XMLCALL
343         xmlTextWriterStartDTDElement(xmlTextWriterPtr writer,
344                                      const xmlChar * name);
345     XMLPUBFUN int XMLCALL xmlTextWriterEndDTDElement(xmlTextWriterPtr
346                                                      writer);
347 
348 /*
349  * DTD element definition conveniency functions
350  */
351     XMLPUBFUN int XMLCALL
352         xmlTextWriterWriteFormatDTDElement(xmlTextWriterPtr writer,
353                                            const xmlChar * name,
354                                            const char *format, ...)
355 					   LIBXML_ATTR_FORMAT(3,4);
356     XMLPUBFUN int XMLCALL
357         xmlTextWriterWriteVFormatDTDElement(xmlTextWriterPtr writer,
358                                             const xmlChar * name,
359                                             const char *format,
360                                             va_list argptr)
361 					    LIBXML_ATTR_FORMAT(3,0);
362     XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDElement(xmlTextWriterPtr
363                                                        writer,
364                                                        const xmlChar *
365                                                        name,
366                                                        const xmlChar *
367                                                        content);
368 
369 /*
370  * DTD attribute list definition
371  */
372     XMLPUBFUN int XMLCALL
373         xmlTextWriterStartDTDAttlist(xmlTextWriterPtr writer,
374                                      const xmlChar * name);
375     XMLPUBFUN int XMLCALL xmlTextWriterEndDTDAttlist(xmlTextWriterPtr
376                                                      writer);
377 
378 /*
379  * DTD attribute list definition conveniency functions
380  */
381     XMLPUBFUN int XMLCALL
382         xmlTextWriterWriteFormatDTDAttlist(xmlTextWriterPtr writer,
383                                            const xmlChar * name,
384                                            const char *format, ...)
385 					   LIBXML_ATTR_FORMAT(3,4);
386     XMLPUBFUN int XMLCALL
387         xmlTextWriterWriteVFormatDTDAttlist(xmlTextWriterPtr writer,
388                                             const xmlChar * name,
389                                             const char *format,
390                                             va_list argptr)
391 					    LIBXML_ATTR_FORMAT(3,0);
392     XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDAttlist(xmlTextWriterPtr
393                                                        writer,
394                                                        const xmlChar *
395                                                        name,
396                                                        const xmlChar *
397                                                        content);
398 
399 /*
400  * DTD entity definition
401  */
402     XMLPUBFUN int XMLCALL
403         xmlTextWriterStartDTDEntity(xmlTextWriterPtr writer,
404                                     int pe, const xmlChar * name);
405     XMLPUBFUN int XMLCALL xmlTextWriterEndDTDEntity(xmlTextWriterPtr
406                                                     writer);
407 
408 /*
409  * DTD entity definition conveniency functions
410  */
411     XMLPUBFUN int XMLCALL
412         xmlTextWriterWriteFormatDTDInternalEntity(xmlTextWriterPtr writer,
413                                                   int pe,
414                                                   const xmlChar * name,
415                                                   const char *format, ...)
416 						  LIBXML_ATTR_FORMAT(4,5);
417     XMLPUBFUN int XMLCALL
418         xmlTextWriterWriteVFormatDTDInternalEntity(xmlTextWriterPtr writer,
419                                                    int pe,
420                                                    const xmlChar * name,
421                                                    const char *format,
422                                                    va_list argptr)
423 						   LIBXML_ATTR_FORMAT(4,0);
424     XMLPUBFUN int XMLCALL
425         xmlTextWriterWriteDTDInternalEntity(xmlTextWriterPtr writer,
426                                             int pe,
427                                             const xmlChar * name,
428                                             const xmlChar * content);
429     XMLPUBFUN int XMLCALL
430         xmlTextWriterWriteDTDExternalEntity(xmlTextWriterPtr writer,
431                                             int pe,
432                                             const xmlChar * name,
433                                             const xmlChar * pubid,
434                                             const xmlChar * sysid,
435                                             const xmlChar * ndataid);
436     XMLPUBFUN int XMLCALL
437         xmlTextWriterWriteDTDExternalEntityContents(xmlTextWriterPtr
438                                                     writer,
439                                                     const xmlChar * pubid,
440                                                     const xmlChar * sysid,
441                                                     const xmlChar *
442                                                     ndataid);
443     XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDEntity(xmlTextWriterPtr
444                                                       writer, int pe,
445                                                       const xmlChar * name,
446                                                       const xmlChar *
447                                                       pubid,
448                                                       const xmlChar *
449                                                       sysid,
450                                                       const xmlChar *
451                                                       ndataid,
452                                                       const xmlChar *
453                                                       content);
454 
455 /*
456  * DTD notation definition
457  */
458     XMLPUBFUN int XMLCALL
459         xmlTextWriterWriteDTDNotation(xmlTextWriterPtr writer,
460                                       const xmlChar * name,
461                                       const xmlChar * pubid,
462                                       const xmlChar * sysid);
463 
464 /*
465  * Indentation
466  */
467     XMLPUBFUN int XMLCALL
468         xmlTextWriterSetIndent(xmlTextWriterPtr writer, int indent);
469     XMLPUBFUN int XMLCALL
470         xmlTextWriterSetIndentString(xmlTextWriterPtr writer,
471                                      const xmlChar * str);
472 
473     XMLPUBFUN int XMLCALL
474         xmlTextWriterSetQuoteChar(xmlTextWriterPtr writer, xmlChar quotechar);
475 
476 
477 /*
478  * misc
479  */
480     XMLPUBFUN int XMLCALL xmlTextWriterFlush(xmlTextWriterPtr writer);
481 
482 #ifdef __cplusplus
483 }
484 #endif
485 
486 #endif /* LIBXML_WRITER_ENABLED */
487 
488 #endif                          /* __XML_XMLWRITER_H__ */
489