1 module expat;
2 
3 import core.stdc.config : c_long, c_ulong;
4 
5 version (XML_UNICODE_WCHAR_T) {
6     version = XML_UNICODE;
7 }
8 
9 version (XML_UNICODE) {
10     version (XML_UNICODE_WCHAR_T) {
11         alias XML_Char  = wchar;
12         alias XML_LChar = wchar;
13     } else {
14         alias XML_Char  = ushort;
15         alias XML_LChar = char;
16     }
17 } else {
18     alias XML_Char  = char;
19     alias XML_LChar = char;
20 }
21 
22 version (XML_LARGE_SIZE) {
23     alias XML_Index = long;
24     alias XML_Size  = ulong;
25 } else {
26     alias XML_Index = c_long;
27     alias XML_Size  = c_ulong;
28 }
29 
30 //
31 
32 struct XML_ParserStruct {}
33 alias XML_Parser = XML_ParserStruct*;
34 
35 alias XML_Bool = bool;
36 
37 alias XML_Status = uint;
38 enum : XML_Status {
39   XML_STATUS_ERROR = 0,
40   XML_STATUS_OK = 1,
41   XML_STATUS_SUSPENDED = 2
42 }
43 
44 alias XML_Error = uint;
45 enum : XML_Error {
46   XML_ERROR_NONE,
47   XML_ERROR_NO_MEMORY,
48   XML_ERROR_SYNTAX,
49   XML_ERROR_NO_ELEMENTS,
50   XML_ERROR_INVALID_TOKEN,
51   XML_ERROR_UNCLOSED_TOKEN,
52   XML_ERROR_PARTIAL_CHAR,
53   XML_ERROR_TAG_MISMATCH,
54   XML_ERROR_DUPLICATE_ATTRIBUTE,
55   XML_ERROR_JUNK_AFTER_DOC_ELEMENT,
56   XML_ERROR_PARAM_ENTITY_REF,
57   XML_ERROR_UNDEFINED_ENTITY,
58   XML_ERROR_RECURSIVE_ENTITY_REF,
59   XML_ERROR_ASYNC_ENTITY,
60   XML_ERROR_BAD_CHAR_REF,
61   XML_ERROR_BINARY_ENTITY_REF,
62   XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF,
63   XML_ERROR_MISPLACED_XML_PI,
64   XML_ERROR_UNKNOWN_ENCODING,
65   XML_ERROR_INCORRECT_ENCODING,
66   XML_ERROR_UNCLOSED_CDATA_SECTION,
67   XML_ERROR_EXTERNAL_ENTITY_HANDLING,
68   XML_ERROR_NOT_STANDALONE,
69   XML_ERROR_UNEXPECTED_STATE,
70   XML_ERROR_ENTITY_DECLARED_IN_PE,
71   XML_ERROR_FEATURE_REQUIRES_XML_DTD,
72   XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING,
73   /* Added in 1.95.7. */
74   XML_ERROR_UNBOUND_PREFIX,
75   /* Added in 1.95.8. */
76   XML_ERROR_UNDECLARING_PREFIX,
77   XML_ERROR_INCOMPLETE_PE,
78   XML_ERROR_XML_DECL,
79   XML_ERROR_TEXT_DECL,
80   XML_ERROR_PUBLICID,
81   XML_ERROR_SUSPENDED,
82   XML_ERROR_NOT_SUSPENDED,
83   XML_ERROR_ABORTED,
84   XML_ERROR_FINISHED,
85   XML_ERROR_SUSPEND_PE,
86   /* Added in 2.0. */
87   XML_ERROR_RESERVED_PREFIX_XML,
88   XML_ERROR_RESERVED_PREFIX_XMLNS,
89   XML_ERROR_RESERVED_NAMESPACE_URI
90 }
91 
92 alias XML_Content_Type = uint;
93 enum : XML_Content_Type {
94   XML_CTYPE_EMPTY = 1,
95   XML_CTYPE_ANY,
96   XML_CTYPE_MIXED,
97   XML_CTYPE_NAME,
98   XML_CTYPE_CHOICE,
99   XML_CTYPE_SEQ
100 }
101 
102 alias XML_Content_Quant = uint;
103 enum : XML_Content_Quant {
104   XML_CQUANT_NONE,
105   XML_CQUANT_OPT,
106   XML_CQUANT_REP,
107   XML_CQUANT_PLUS
108 }
109 
110 struct XML_Content {
111   XML_Content_Type              type;
112   XML_Content_Quant             quant;
113   XML_Char*                     name;
114   uint                          numchildren;
115   XML_Content*                  children;
116 }
117 
118 alias XML_ElementDeclHandler = extern(C) nothrow void function(void* userData,
119                                                                     const(XML_Char)* name,
120                                                                     XML_Content* model);
121 
122 
123 extern(C) nothrow void
124 XML_SetElementDeclHandler(XML_Parser parser,
125                           XML_ElementDeclHandler eldecl);
126 
127 /* The Attlist declaration handler is called for *each* attribute. So
128    a single Attlist declaration with multiple attributes declared will
129    generate multiple calls to this handler. The "default" parameter
130    may be NULL in the case of the "#IMPLIED" or "#REQUIRED"
131    keyword. The "isrequired" parameter will be true and the default
132    value will be NULL in the case of "#REQUIRED". If "isrequired" is
133    true and default is non-NULL, then this is a "#FIXED" default.
134 */
135 alias XML_AttlistDeclHandler = extern(C) nothrow void function(void*            userData,
136                                                                     const(XML_Char)* elname,
137                                                                     const(XML_Char)* attname,
138                                                                     const(XML_Char)* att_type,
139                                                                     const(XML_Char)* dflt,
140                                                                     int              isrequired);
141 
142 extern(C) nothrow void
143 XML_SetAttlistDeclHandler(XML_Parser parser,
144                           XML_AttlistDeclHandler attdecl);
145 
146 alias XML_XmlDeclHandler = extern(C) nothrow void function(void           *userData,
147                                             const(XML_Char)* version_,
148                                             const(XML_Char)* encoding,
149                                             int             standalone);
150 
151 extern(C) nothrow void
152 XML_SetXmlDeclHandler(XML_Parser parser,
153                       XML_XmlDeclHandler xmldecl);
154 
155 
156 struct XML_Memory_Handling_Suite {
157   extern(C) nothrow void function(size_t size)            malloc_fcn;
158   extern(C) nothrow void function(void* ptr, size_t size) realloc_fcn;
159   extern(C) nothrow void function(void* ptr)              free_fcn;
160 }
161 
162 extern(C) nothrow XML_Parser
163 XML_ParserCreate(const(XML_Char)* encoding);
164 
165 extern(C) nothrow XML_Parser
166 XML_ParserCreateNS(const(XML_Char)* encoding, XML_Char namespaceSeparator);
167 
168 
169 extern(C) nothrow XML_Parser
170 XML_ParserCreate_MM(const(XML_Char)* encoding,
171                     const(XML_Memory_Handling_Suite)* memsuite,
172                     const(XML_Char)* namespaceSeparator);
173 
174 
175 extern(C) nothrow XML_Bool
176 XML_ParserReset(XML_Parser parser, const(XML_Char)* encoding);
177 
178 alias XML_StartElementHandler = extern(C) nothrow void function(void* userData,
179                                                  const(XML_Char)* name,
180                                                  const(XML_Char*)* atts);
181 
182 alias XML_EndElementHandler = extern(C) nothrow void function(void* userData,
183                                                const(XML_Char)* name);
184 
185 alias XML_CharacterDataHandler = extern(C) nothrow void function(void* userData,
186                                                   const(XML_Char)* s,
187                                                   int len);
188 
189 alias XML_ProcessingInstructionHandler = extern(C) nothrow void function(
190                                                 void* userData,
191                                                 const(XML_Char)* target,
192                                                 const(XML_Char)* data);
193 
194 alias XML_CommentHandler = extern(C) nothrow void function(void* userData,
195                                             const(XML_Char)* data);
196 
197 alias XML_StartCdataSectionHandler = extern(C) nothrow void function(void* userData);
198 alias XML_EndCdataSectionHandler = extern(C) nothrow void function(void* userData);
199 
200 alias XML_DefaultHandler = extern(C) nothrow void function(void* userData,
201                                             const(XML_Char)* s,
202                                             int len);
203 
204 alias XML_StartDoctypeDeclHandler = extern(C) nothrow void function(
205                                             void* userData,
206                                             const(XML_Char)* doctypeName,
207                                             const(XML_Char)* sysid,
208                                             const(XML_Char)* pubid,
209                                             int has_internal_subset);
210 
211 alias XML_EndDoctypeDeclHandler = extern(C) nothrow void function(void* userData);
212 
213 alias XML_EntityDeclHandler = extern(C) nothrow void function(
214                               void* userData,
215                               const(XML_Char)* entityName,
216                               int is_parameter_entity,
217                               const(XML_Char)* value,
218                               int value_length,
219                               const(XML_Char)* base,
220                               const(XML_Char)* systemId,
221                               const(XML_Char)* publicId,
222                               const(XML_Char)* notationName);
223 
224 extern(C) nothrow void
225 XML_SetEntityDeclHandler(XML_Parser parser,
226                          XML_EntityDeclHandler handler);
227 
228 alias XML_UnparsedEntityDeclHandler = extern(C) nothrow void function(
229                                     void* userData,
230                                     const(XML_Char)* entityName,
231                                     const(XML_Char)* base,
232                                     const(XML_Char)* systemId,
233                                     const(XML_Char)* publicId,
234                                     const(XML_Char)* notationName);
235 
236 alias XML_NotationDeclHandler = extern(C) nothrow void function(
237                                     void* userData,
238                                     const(XML_Char)* notationName,
239                                     const(XML_Char)* base,
240                                     const(XML_Char)* systemId,
241                                     const(XML_Char)* publicId);
242 
243 alias XML_StartNamespaceDeclHandler = extern(C) nothrow void function(
244                                     void* userData,
245                                     const(XML_Char)* prefix,
246                                     const(XML_Char)* uri);
247 
248 alias XML_EndNamespaceDeclHandler = extern(C) nothrow void function(
249                                     void* userData,
250                                     const(XML_Char)* prefix);
251 
252 alias XML_NotStandaloneHandler = extern(C) nothrow int function(void* userData);
253 
254 alias XML_ExternalEntityRefHandler = extern(C) nothrow int function(
255                                     XML_Parser parser,
256                                     const(XML_Char)* context,
257                                     const(XML_Char)* base,
258                                     const(XML_Char)* systemId,
259                                     const(XML_Char)* publicId);
260 
261 alias XML_SkippedEntityHandler = extern(C) nothrow void function(
262                                     void* userData,
263                                     const(XML_Char)* entityName,
264                                     int is_parameter_entity);
265 
266 struct XML_Encoding {
267   int[256] map;
268   void* data;
269   extern(C) nothrow int function(void* data, const(char)* s) convert;
270   extern(C) nothrow void function(void* data)                release;
271 }
272 
273 alias XML_UnknownEncodingHandler = extern(C) nothrow int function(
274                                     void* encodingHandlerData,
275                                     const(XML_Char)* name,
276                                     XML_Encoding *info);
277 
278 extern(C) nothrow void
279 XML_SetElementHandler(XML_Parser parser,
280                       XML_StartElementHandler start,
281                       XML_EndElementHandler end);
282 
283 extern(C) nothrow void
284 XML_SetStartElementHandler(XML_Parser parser,
285                            XML_StartElementHandler handler);
286 
287 extern(C) nothrow void
288 XML_SetEndElementHandler(XML_Parser parser,
289                          XML_EndElementHandler handler);
290 
291 extern(C) nothrow void
292 XML_SetCharacterDataHandler(XML_Parser parser,
293                             XML_CharacterDataHandler handler);
294 
295 extern(C) nothrow void
296 XML_SetProcessingInstructionHandler(XML_Parser parser,
297                                     XML_ProcessingInstructionHandler handler);
298 extern(C) nothrow void
299 XML_SetCommentHandler(XML_Parser parser,
300                       XML_CommentHandler handler);
301 
302 extern(C) nothrow void
303 XML_SetCdataSectionHandler(XML_Parser parser,
304                            XML_StartCdataSectionHandler start,
305                            XML_EndCdataSectionHandler end);
306 
307 extern(C) nothrow void
308 XML_SetStartCdataSectionHandler(XML_Parser parser,
309                                 XML_StartCdataSectionHandler start);
310 
311 extern(C) nothrow void
312 XML_SetEndCdataSectionHandler(XML_Parser parser,
313                               XML_EndCdataSectionHandler end);
314 
315 extern(C) nothrow void
316 XML_SetDefaultHandler(XML_Parser parser,
317                       XML_DefaultHandler handler);
318 
319 extern(C) nothrow void
320 XML_SetDefaultHandlerExpand(XML_Parser parser,
321                             XML_DefaultHandler handler);
322 
323 extern(C) nothrow void
324 XML_SetDoctypeDeclHandler(XML_Parser parser,
325                           XML_StartDoctypeDeclHandler start,
326                           XML_EndDoctypeDeclHandler end);
327 
328 extern(C) nothrow void
329 XML_SetStartDoctypeDeclHandler(XML_Parser parser,
330                                XML_StartDoctypeDeclHandler start);
331 
332 extern(C) nothrow void
333 XML_SetEndDoctypeDeclHandler(XML_Parser parser,
334                              XML_EndDoctypeDeclHandler end);
335 
336 extern(C) nothrow void
337 XML_SetUnparsedEntityDeclHandler(XML_Parser parser,
338                                  XML_UnparsedEntityDeclHandler handler);
339 
340 extern(C) nothrow void
341 XML_SetNotationDeclHandler(XML_Parser parser,
342                            XML_NotationDeclHandler handler);
343 
344 extern(C) nothrow void
345 XML_SetNamespaceDeclHandler(XML_Parser parser,
346                             XML_StartNamespaceDeclHandler start,
347                             XML_EndNamespaceDeclHandler end);
348 
349 extern(C) nothrow void
350 XML_SetStartNamespaceDeclHandler(XML_Parser parser,
351                                  XML_StartNamespaceDeclHandler start);
352 
353 extern(C) nothrow void
354 XML_SetEndNamespaceDeclHandler(XML_Parser parser,
355                                XML_EndNamespaceDeclHandler end);
356 
357 extern(C) nothrow void
358 XML_SetNotStandaloneHandler(XML_Parser parser,
359                             XML_NotStandaloneHandler handler);
360 
361 extern(C) nothrow void
362 XML_SetExternalEntityRefHandler(XML_Parser parser,
363                                 XML_ExternalEntityRefHandler handler);
364 
365 extern(C) nothrow void
366 XML_SetExternalEntityRefHandlerArg(XML_Parser parser,
367                                    void* arg);
368 
369 extern(C) nothrow void
370 XML_SetSkippedEntityHandler(XML_Parser parser,
371                             XML_SkippedEntityHandler handler);
372 
373 extern(C) nothrow void
374 XML_SetUnknownEncodingHandler(XML_Parser parser,
375                               XML_UnknownEncodingHandler handler,
376                               void* encodingHandlerData);
377 
378 extern(C) nothrow void
379 XML_DefaultCurrent(XML_Parser parser);
380 
381 extern(C) nothrow void
382 XML_SetReturnNSTriplet(XML_Parser parser, int do_nst);
383 
384 extern(C) nothrow void
385 XML_SetUserData(XML_Parser parser, void* userData);
386 
387 auto XML_GetUserData(XML_Parser parser) { return cast(void*) parser; }
388 
389 extern(C) nothrow XML_Status
390 XML_SetEncoding(XML_Parser parser, const(XML_Char)* encoding);
391 
392 extern(C) nothrow void
393 XML_UseParserAsHandlerArg(XML_Parser parser);
394 
395 extern(C) nothrow XML_Error
396 XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD);
397 
398 extern(C) nothrow XML_Status
399 XML_SetBase(XML_Parser parser, const(XML_Char)* base);
400 
401 extern(C) nothrow const(XML_Char)* 
402 XML_GetBase(XML_Parser parser);
403 
404 extern(C) nothrow int
405 XML_GetSpecifiedAttributeCount(XML_Parser parser);
406 
407 extern(C) nothrow int
408 XML_GetIdAttributeIndex(XML_Parser parser);
409 
410 struct XML_AttrInfo {
411   XML_Index  nameStart;  /* Offset to beginning of the attribute name. */
412   XML_Index  nameEnd;    /* Offset after the attribute name's last byte. */
413   XML_Index  valueStart; /* Offset to beginning of the attribute value. */
414   XML_Index  valueEnd;   /* Offset after the attribute value's last byte. */
415 }
416 
417 extern(C) nothrow const(XML_AttrInfo)* 
418 XML_GetAttributeInfo(XML_Parser parser);
419 
420 extern(C) nothrow XML_Status
421 XML_Parse(XML_Parser parser, const(char)* s, int len, int isFinal);
422 
423 extern(C) nothrow void* 
424 XML_GetBuffer(XML_Parser parser, int len);
425 
426 extern(C) nothrow XML_Status
427 XML_ParseBuffer(XML_Parser parser, int len, int isFinal);
428 
429 extern(C) nothrow XML_Status
430 XML_StopParser(XML_Parser parser, XML_Bool resumable);
431 
432 extern(C) nothrow XML_Status
433 XML_ResumeParser(XML_Parser parser);
434 
435 alias XML_Parsing = uint;
436 enum : XML_Parsing {
437   XML_INITIALIZED,
438   XML_PARSING,
439   XML_FINISHED,
440   XML_SUSPENDED
441 }
442 
443 struct XML_ParsingStatus {
444   XML_Parsing parsing;
445   XML_Bool finalBuffer;
446 }
447 
448 extern(C) nothrow void
449 XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status);
450 
451 extern(C) nothrow XML_Parser
452 XML_ExternalEntityParserCreate(XML_Parser parser,
453                                const(XML_Char)* context,
454                                const(XML_Char)* encoding);
455 
456 alias XML_ParamEntityParsing = uint;
457 enum : XML_ParamEntityParsing {
458   XML_PARAM_ENTITY_PARSING_NEVER,
459   XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE,
460   XML_PARAM_ENTITY_PARSING_ALWAYS
461 }
462 
463 extern(C) nothrow int
464 XML_SetParamEntityParsing(XML_Parser parser,
465                           XML_ParamEntityParsing parsing);
466 
467 extern(C) nothrow int
468 XML_SetHashSalt(XML_Parser parser,
469                 c_ulong hash_salt);
470 
471 extern(C) nothrow XML_Error
472 XML_GetErrorCode(XML_Parser parser);
473 
474 extern(C) nothrow XML_Size XML_GetCurrentLineNumber(XML_Parser parser);
475 extern(C) nothrow XML_Size XML_GetCurrentColumnNumber(XML_Parser parser);
476 extern(C) nothrow XML_Index XML_GetCurrentByteIndex(XML_Parser parser);
477 
478 extern(C) nothrow int
479 XML_GetCurrentByteCount(XML_Parser parser);
480 
481 extern(C) nothrow const(char)* 
482 XML_GetInputContext(XML_Parser parser,
483                     int *offset,
484                     int *size);
485 
486 extern(C) nothrow void
487 XML_FreeContentModel(XML_Parser parser, XML_Content* model);
488 
489 extern(C) nothrow void* 
490 XML_MemMalloc(XML_Parser parser, size_t size);
491 
492 extern(C) nothrow void* 
493 XML_MemRealloc(XML_Parser parser, void* ptr, size_t size);
494 
495 extern(C) nothrow void
496 XML_MemFree(XML_Parser parser, void* ptr);
497 
498 extern(C) nothrow void
499 XML_ParserFree(XML_Parser parser);
500 
501 extern(C) nothrow const(XML_LChar)* 
502 XML_ErrorString(XML_Error code);
503 
504 extern(C) nothrow const(XML_LChar)* 
505 XML_ExpatVersion();
506 
507 struct XML_Expat_Version {
508   int major;
509   int minor;
510   int micro;
511 }
512 
513 extern(C) nothrow XML_Expat_Version
514 XML_ExpatVersionInfo();
515 
516 alias XML_FeatureEnum = uint; 
517 enum : XML_FeatureEnum {
518   XML_FEATURE_END = 0,
519   XML_FEATURE_UNICODE,
520   XML_FEATURE_UNICODE_WCHAR_T,
521   XML_FEATURE_DTD,
522   XML_FEATURE_CONTEXT_BYTES,
523   XML_FEATURE_MIN_SIZE,
524   XML_FEATURE_SIZEOF_XML_CHAR,
525   XML_FEATURE_SIZEOF_XML_LCHAR,
526   XML_FEATURE_NS,
527   XML_FEATURE_LARGE_SIZE,
528   XML_FEATURE_ATTR_INFO
529 }
530 
531 struct XML_Feature {
532   XML_FeatureEnum          feature;
533   const(XML_LChar)*        name;
534   c_long  value;
535 }
536 
537 extern(C) nothrow const(XML_Feature)*
538 XML_GetFeatureList();