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