psych 3.3.2 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,1985 +0,0 @@
1
- /**
2
- * @file yaml.h
3
- * @brief Public interface for libyaml.
4
- *
5
- * Include the header file with the code:
6
- * @code
7
- * #include <yaml.h>
8
- * @endcode
9
- */
10
-
11
- #ifndef YAML_H
12
- #define YAML_H
13
-
14
- #ifdef __cplusplus
15
- extern "C" {
16
- #endif
17
-
18
- #include <stdlib.h>
19
- #include <stdio.h>
20
- #include <string.h>
21
-
22
- /**
23
- * @defgroup export Export Definitions
24
- * @{
25
- */
26
-
27
- /** The public API declaration. */
28
-
29
- #if defined(__MINGW32__)
30
- # define YAML_DECLARE(type) type
31
- #elif defined(_WIN32)
32
- # if defined(YAML_DECLARE_STATIC)
33
- # define YAML_DECLARE(type) type
34
- # elif defined(YAML_DECLARE_EXPORT)
35
- # define YAML_DECLARE(type) __declspec(dllexport) type
36
- # else
37
- # define YAML_DECLARE(type) __declspec(dllimport) type
38
- # endif
39
- #else
40
- # define YAML_DECLARE(type) type
41
- #endif
42
-
43
- /** @} */
44
-
45
- /**
46
- * @defgroup version Version Information
47
- * @{
48
- */
49
-
50
- /**
51
- * Get the library version as a string.
52
- *
53
- * @returns The function returns the pointer to a static string of the form
54
- * @c "X.Y.Z", where @c X is the major version number, @c Y is a minor version
55
- * number, and @c Z is the patch version number.
56
- */
57
-
58
- YAML_DECLARE(const char *)
59
- yaml_get_version_string(void);
60
-
61
- /**
62
- * Get the library version numbers.
63
- *
64
- * @param[out] major Major version number.
65
- * @param[out] minor Minor version number.
66
- * @param[out] patch Patch version number.
67
- */
68
-
69
- YAML_DECLARE(void)
70
- yaml_get_version(int *major, int *minor, int *patch);
71
-
72
- /** @} */
73
-
74
- /**
75
- * @defgroup basic Basic Types
76
- * @{
77
- */
78
-
79
- /** The character type (UTF-8 octet). */
80
- typedef unsigned char yaml_char_t;
81
-
82
- /** The version directive data. */
83
- typedef struct yaml_version_directive_s {
84
- /** The major version number. */
85
- int major;
86
- /** The minor version number. */
87
- int minor;
88
- } yaml_version_directive_t;
89
-
90
- /** The tag directive data. */
91
- typedef struct yaml_tag_directive_s {
92
- /** The tag handle. */
93
- yaml_char_t *handle;
94
- /** The tag prefix. */
95
- yaml_char_t *prefix;
96
- } yaml_tag_directive_t;
97
-
98
- /** The stream encoding. */
99
- typedef enum yaml_encoding_e {
100
- /** Let the parser choose the encoding. */
101
- YAML_ANY_ENCODING,
102
- /** The default UTF-8 encoding. */
103
- YAML_UTF8_ENCODING,
104
- /** The UTF-16-LE encoding with BOM. */
105
- YAML_UTF16LE_ENCODING,
106
- /** The UTF-16-BE encoding with BOM. */
107
- YAML_UTF16BE_ENCODING
108
- } yaml_encoding_t;
109
-
110
- /** Line break types. */
111
-
112
- typedef enum yaml_break_e {
113
- /** Let the parser choose the break type. */
114
- YAML_ANY_BREAK,
115
- /** Use CR for line breaks (Mac style). */
116
- YAML_CR_BREAK,
117
- /** Use LN for line breaks (Unix style). */
118
- YAML_LN_BREAK,
119
- /** Use CR LN for line breaks (DOS style). */
120
- YAML_CRLN_BREAK
121
- } yaml_break_t;
122
-
123
- /** Many bad things could happen with the parser and emitter. */
124
- typedef enum yaml_error_type_e {
125
- /** No error is produced. */
126
- YAML_NO_ERROR,
127
-
128
- /** Cannot allocate or reallocate a block of memory. */
129
- YAML_MEMORY_ERROR,
130
-
131
- /** Cannot read or decode the input stream. */
132
- YAML_READER_ERROR,
133
- /** Cannot scan the input stream. */
134
- YAML_SCANNER_ERROR,
135
- /** Cannot parse the input stream. */
136
- YAML_PARSER_ERROR,
137
- /** Cannot compose a YAML document. */
138
- YAML_COMPOSER_ERROR,
139
-
140
- /** Cannot write to the output stream. */
141
- YAML_WRITER_ERROR,
142
- /** Cannot emit a YAML stream. */
143
- YAML_EMITTER_ERROR
144
- } yaml_error_type_t;
145
-
146
- /** The pointer position. */
147
- typedef struct yaml_mark_s {
148
- /** The position index. */
149
- size_t index;
150
-
151
- /** The position line. */
152
- size_t line;
153
-
154
- /** The position column. */
155
- size_t column;
156
- } yaml_mark_t;
157
-
158
- /** @} */
159
-
160
- /**
161
- * @defgroup styles Node Styles
162
- * @{
163
- */
164
-
165
- /** Scalar styles. */
166
- typedef enum yaml_scalar_style_e {
167
- /** Let the emitter choose the style. */
168
- YAML_ANY_SCALAR_STYLE,
169
-
170
- /** The plain scalar style. */
171
- YAML_PLAIN_SCALAR_STYLE,
172
-
173
- /** The single-quoted scalar style. */
174
- YAML_SINGLE_QUOTED_SCALAR_STYLE,
175
- /** The double-quoted scalar style. */
176
- YAML_DOUBLE_QUOTED_SCALAR_STYLE,
177
-
178
- /** The literal scalar style. */
179
- YAML_LITERAL_SCALAR_STYLE,
180
- /** The folded scalar style. */
181
- YAML_FOLDED_SCALAR_STYLE
182
- } yaml_scalar_style_t;
183
-
184
- /** Sequence styles. */
185
- typedef enum yaml_sequence_style_e {
186
- /** Let the emitter choose the style. */
187
- YAML_ANY_SEQUENCE_STYLE,
188
-
189
- /** The block sequence style. */
190
- YAML_BLOCK_SEQUENCE_STYLE,
191
- /** The flow sequence style. */
192
- YAML_FLOW_SEQUENCE_STYLE
193
- } yaml_sequence_style_t;
194
-
195
- /** Mapping styles. */
196
- typedef enum yaml_mapping_style_e {
197
- /** Let the emitter choose the style. */
198
- YAML_ANY_MAPPING_STYLE,
199
-
200
- /** The block mapping style. */
201
- YAML_BLOCK_MAPPING_STYLE,
202
- /** The flow mapping style. */
203
- YAML_FLOW_MAPPING_STYLE
204
- /* YAML_FLOW_SET_MAPPING_STYLE */
205
- } yaml_mapping_style_t;
206
-
207
- /** @} */
208
-
209
- /**
210
- * @defgroup tokens Tokens
211
- * @{
212
- */
213
-
214
- /** Token types. */
215
- typedef enum yaml_token_type_e {
216
- /** An empty token. */
217
- YAML_NO_TOKEN,
218
-
219
- /** A STREAM-START token. */
220
- YAML_STREAM_START_TOKEN,
221
- /** A STREAM-END token. */
222
- YAML_STREAM_END_TOKEN,
223
-
224
- /** A VERSION-DIRECTIVE token. */
225
- YAML_VERSION_DIRECTIVE_TOKEN,
226
- /** A TAG-DIRECTIVE token. */
227
- YAML_TAG_DIRECTIVE_TOKEN,
228
- /** A DOCUMENT-START token. */
229
- YAML_DOCUMENT_START_TOKEN,
230
- /** A DOCUMENT-END token. */
231
- YAML_DOCUMENT_END_TOKEN,
232
-
233
- /** A BLOCK-SEQUENCE-START token. */
234
- YAML_BLOCK_SEQUENCE_START_TOKEN,
235
- /** A BLOCK-MAPPING-START token. */
236
- YAML_BLOCK_MAPPING_START_TOKEN,
237
- /** A BLOCK-END token. */
238
- YAML_BLOCK_END_TOKEN,
239
-
240
- /** A FLOW-SEQUENCE-START token. */
241
- YAML_FLOW_SEQUENCE_START_TOKEN,
242
- /** A FLOW-SEQUENCE-END token. */
243
- YAML_FLOW_SEQUENCE_END_TOKEN,
244
- /** A FLOW-MAPPING-START token. */
245
- YAML_FLOW_MAPPING_START_TOKEN,
246
- /** A FLOW-MAPPING-END token. */
247
- YAML_FLOW_MAPPING_END_TOKEN,
248
-
249
- /** A BLOCK-ENTRY token. */
250
- YAML_BLOCK_ENTRY_TOKEN,
251
- /** A FLOW-ENTRY token. */
252
- YAML_FLOW_ENTRY_TOKEN,
253
- /** A KEY token. */
254
- YAML_KEY_TOKEN,
255
- /** A VALUE token. */
256
- YAML_VALUE_TOKEN,
257
-
258
- /** An ALIAS token. */
259
- YAML_ALIAS_TOKEN,
260
- /** An ANCHOR token. */
261
- YAML_ANCHOR_TOKEN,
262
- /** A TAG token. */
263
- YAML_TAG_TOKEN,
264
- /** A SCALAR token. */
265
- YAML_SCALAR_TOKEN
266
- } yaml_token_type_t;
267
-
268
- /** The token structure. */
269
- typedef struct yaml_token_s {
270
-
271
- /** The token type. */
272
- yaml_token_type_t type;
273
-
274
- /** The token data. */
275
- union {
276
-
277
- /** The stream start (for @c YAML_STREAM_START_TOKEN). */
278
- struct {
279
- /** The stream encoding. */
280
- yaml_encoding_t encoding;
281
- } stream_start;
282
-
283
- /** The alias (for @c YAML_ALIAS_TOKEN). */
284
- struct {
285
- /** The alias value. */
286
- yaml_char_t *value;
287
- } alias;
288
-
289
- /** The anchor (for @c YAML_ANCHOR_TOKEN). */
290
- struct {
291
- /** The anchor value. */
292
- yaml_char_t *value;
293
- } anchor;
294
-
295
- /** The tag (for @c YAML_TAG_TOKEN). */
296
- struct {
297
- /** The tag handle. */
298
- yaml_char_t *handle;
299
- /** The tag suffix. */
300
- yaml_char_t *suffix;
301
- } tag;
302
-
303
- /** The scalar value (for @c YAML_SCALAR_TOKEN). */
304
- struct {
305
- /** The scalar value. */
306
- yaml_char_t *value;
307
- /** The length of the scalar value. */
308
- size_t length;
309
- /** The scalar style. */
310
- yaml_scalar_style_t style;
311
- } scalar;
312
-
313
- /** The version directive (for @c YAML_VERSION_DIRECTIVE_TOKEN). */
314
- struct {
315
- /** The major version number. */
316
- int major;
317
- /** The minor version number. */
318
- int minor;
319
- } version_directive;
320
-
321
- /** The tag directive (for @c YAML_TAG_DIRECTIVE_TOKEN). */
322
- struct {
323
- /** The tag handle. */
324
- yaml_char_t *handle;
325
- /** The tag prefix. */
326
- yaml_char_t *prefix;
327
- } tag_directive;
328
-
329
- } data;
330
-
331
- /** The beginning of the token. */
332
- yaml_mark_t start_mark;
333
- /** The end of the token. */
334
- yaml_mark_t end_mark;
335
-
336
- } yaml_token_t;
337
-
338
- /**
339
- * Free any memory allocated for a token object.
340
- *
341
- * @param[in,out] token A token object.
342
- */
343
-
344
- YAML_DECLARE(void)
345
- yaml_token_delete(yaml_token_t *token);
346
-
347
- /** @} */
348
-
349
- /**
350
- * @defgroup events Events
351
- * @{
352
- */
353
-
354
- /** Event types. */
355
- typedef enum yaml_event_type_e {
356
- /** An empty event. */
357
- YAML_NO_EVENT,
358
-
359
- /** A STREAM-START event. */
360
- YAML_STREAM_START_EVENT,
361
- /** A STREAM-END event. */
362
- YAML_STREAM_END_EVENT,
363
-
364
- /** A DOCUMENT-START event. */
365
- YAML_DOCUMENT_START_EVENT,
366
- /** A DOCUMENT-END event. */
367
- YAML_DOCUMENT_END_EVENT,
368
-
369
- /** An ALIAS event. */
370
- YAML_ALIAS_EVENT,
371
- /** A SCALAR event. */
372
- YAML_SCALAR_EVENT,
373
-
374
- /** A SEQUENCE-START event. */
375
- YAML_SEQUENCE_START_EVENT,
376
- /** A SEQUENCE-END event. */
377
- YAML_SEQUENCE_END_EVENT,
378
-
379
- /** A MAPPING-START event. */
380
- YAML_MAPPING_START_EVENT,
381
- /** A MAPPING-END event. */
382
- YAML_MAPPING_END_EVENT
383
- } yaml_event_type_t;
384
-
385
- /** The event structure. */
386
- typedef struct yaml_event_s {
387
-
388
- /** The event type. */
389
- yaml_event_type_t type;
390
-
391
- /** The event data. */
392
- union {
393
-
394
- /** The stream parameters (for @c YAML_STREAM_START_EVENT). */
395
- struct {
396
- /** The document encoding. */
397
- yaml_encoding_t encoding;
398
- } stream_start;
399
-
400
- /** The document parameters (for @c YAML_DOCUMENT_START_EVENT). */
401
- struct {
402
- /** The version directive. */
403
- yaml_version_directive_t *version_directive;
404
-
405
- /** The list of tag directives. */
406
- struct {
407
- /** The beginning of the tag directives list. */
408
- yaml_tag_directive_t *start;
409
- /** The end of the tag directives list. */
410
- yaml_tag_directive_t *end;
411
- } tag_directives;
412
-
413
- /** Is the document indicator implicit? */
414
- int implicit;
415
- } document_start;
416
-
417
- /** The document end parameters (for @c YAML_DOCUMENT_END_EVENT). */
418
- struct {
419
- /** Is the document end indicator implicit? */
420
- int implicit;
421
- } document_end;
422
-
423
- /** The alias parameters (for @c YAML_ALIAS_EVENT). */
424
- struct {
425
- /** The anchor. */
426
- yaml_char_t *anchor;
427
- } alias;
428
-
429
- /** The scalar parameters (for @c YAML_SCALAR_EVENT). */
430
- struct {
431
- /** The anchor. */
432
- yaml_char_t *anchor;
433
- /** The tag. */
434
- yaml_char_t *tag;
435
- /** The scalar value. */
436
- yaml_char_t *value;
437
- /** The length of the scalar value. */
438
- size_t length;
439
- /** Is the tag optional for the plain style? */
440
- int plain_implicit;
441
- /** Is the tag optional for any non-plain style? */
442
- int quoted_implicit;
443
- /** The scalar style. */
444
- yaml_scalar_style_t style;
445
- } scalar;
446
-
447
- /** The sequence parameters (for @c YAML_SEQUENCE_START_EVENT). */
448
- struct {
449
- /** The anchor. */
450
- yaml_char_t *anchor;
451
- /** The tag. */
452
- yaml_char_t *tag;
453
- /** Is the tag optional? */
454
- int implicit;
455
- /** The sequence style. */
456
- yaml_sequence_style_t style;
457
- } sequence_start;
458
-
459
- /** The mapping parameters (for @c YAML_MAPPING_START_EVENT). */
460
- struct {
461
- /** The anchor. */
462
- yaml_char_t *anchor;
463
- /** The tag. */
464
- yaml_char_t *tag;
465
- /** Is the tag optional? */
466
- int implicit;
467
- /** The mapping style. */
468
- yaml_mapping_style_t style;
469
- } mapping_start;
470
-
471
- } data;
472
-
473
- /** The beginning of the event. */
474
- yaml_mark_t start_mark;
475
- /** The end of the event. */
476
- yaml_mark_t end_mark;
477
-
478
- } yaml_event_t;
479
-
480
- /**
481
- * Create the STREAM-START event.
482
- *
483
- * @param[out] event An empty event object.
484
- * @param[in] encoding The stream encoding.
485
- *
486
- * @returns @c 1 if the function succeeded, @c 0 on error.
487
- */
488
-
489
- YAML_DECLARE(int)
490
- yaml_stream_start_event_initialize(yaml_event_t *event,
491
- yaml_encoding_t encoding);
492
-
493
- /**
494
- * Create the STREAM-END event.
495
- *
496
- * @param[out] event An empty event object.
497
- *
498
- * @returns @c 1 if the function succeeded, @c 0 on error.
499
- */
500
-
501
- YAML_DECLARE(int)
502
- yaml_stream_end_event_initialize(yaml_event_t *event);
503
-
504
- /**
505
- * Create the DOCUMENT-START event.
506
- *
507
- * The @a implicit argument is considered as a stylistic parameter and may be
508
- * ignored by the emitter.
509
- *
510
- * @param[out] event An empty event object.
511
- * @param[in] version_directive The %YAML directive value or
512
- * @c NULL.
513
- * @param[in] tag_directives_start The beginning of the %TAG
514
- * directives list.
515
- * @param[in] tag_directives_end The end of the %TAG directives
516
- * list.
517
- * @param[in] implicit If the document start indicator is
518
- * implicit.
519
- *
520
- * @returns @c 1 if the function succeeded, @c 0 on error.
521
- */
522
-
523
- YAML_DECLARE(int)
524
- yaml_document_start_event_initialize(yaml_event_t *event,
525
- yaml_version_directive_t *version_directive,
526
- yaml_tag_directive_t *tag_directives_start,
527
- yaml_tag_directive_t *tag_directives_end,
528
- int implicit);
529
-
530
- /**
531
- * Create the DOCUMENT-END event.
532
- *
533
- * The @a implicit argument is considered as a stylistic parameter and may be
534
- * ignored by the emitter.
535
- *
536
- * @param[out] event An empty event object.
537
- * @param[in] implicit If the document end indicator is implicit.
538
- *
539
- * @returns @c 1 if the function succeeded, @c 0 on error.
540
- */
541
-
542
- YAML_DECLARE(int)
543
- yaml_document_end_event_initialize(yaml_event_t *event, int implicit);
544
-
545
- /**
546
- * Create an ALIAS event.
547
- *
548
- * @param[out] event An empty event object.
549
- * @param[in] anchor The anchor value.
550
- *
551
- * @returns @c 1 if the function succeeded, @c 0 on error.
552
- */
553
-
554
- YAML_DECLARE(int)
555
- yaml_alias_event_initialize(yaml_event_t *event, const yaml_char_t *anchor);
556
-
557
- /**
558
- * Create a SCALAR event.
559
- *
560
- * The @a style argument may be ignored by the emitter.
561
- *
562
- * Either the @a tag attribute or one of the @a plain_implicit and
563
- * @a quoted_implicit flags must be set.
564
- *
565
- * @param[out] event An empty event object.
566
- * @param[in] anchor The scalar anchor or @c NULL.
567
- * @param[in] tag The scalar tag or @c NULL.
568
- * @param[in] value The scalar value.
569
- * @param[in] length The length of the scalar value.
570
- * @param[in] plain_implicit If the tag may be omitted for the plain
571
- * style.
572
- * @param[in] quoted_implicit If the tag may be omitted for any
573
- * non-plain style.
574
- * @param[in] style The scalar style.
575
- *
576
- * @returns @c 1 if the function succeeded, @c 0 on error.
577
- */
578
-
579
- YAML_DECLARE(int)
580
- yaml_scalar_event_initialize(yaml_event_t *event,
581
- const yaml_char_t *anchor, const yaml_char_t *tag,
582
- const yaml_char_t *value, int length,
583
- int plain_implicit, int quoted_implicit,
584
- yaml_scalar_style_t style);
585
-
586
- /**
587
- * Create a SEQUENCE-START event.
588
- *
589
- * The @a style argument may be ignored by the emitter.
590
- *
591
- * Either the @a tag attribute or the @a implicit flag must be set.
592
- *
593
- * @param[out] event An empty event object.
594
- * @param[in] anchor The sequence anchor or @c NULL.
595
- * @param[in] tag The sequence tag or @c NULL.
596
- * @param[in] implicit If the tag may be omitted.
597
- * @param[in] style The sequence style.
598
- *
599
- * @returns @c 1 if the function succeeded, @c 0 on error.
600
- */
601
-
602
- YAML_DECLARE(int)
603
- yaml_sequence_start_event_initialize(yaml_event_t *event,
604
- const yaml_char_t *anchor, const yaml_char_t *tag, int implicit,
605
- yaml_sequence_style_t style);
606
-
607
- /**
608
- * Create a SEQUENCE-END event.
609
- *
610
- * @param[out] event An empty event object.
611
- *
612
- * @returns @c 1 if the function succeeded, @c 0 on error.
613
- */
614
-
615
- YAML_DECLARE(int)
616
- yaml_sequence_end_event_initialize(yaml_event_t *event);
617
-
618
- /**
619
- * Create a MAPPING-START event.
620
- *
621
- * The @a style argument may be ignored by the emitter.
622
- *
623
- * Either the @a tag attribute or the @a implicit flag must be set.
624
- *
625
- * @param[out] event An empty event object.
626
- * @param[in] anchor The mapping anchor or @c NULL.
627
- * @param[in] tag The mapping tag or @c NULL.
628
- * @param[in] implicit If the tag may be omitted.
629
- * @param[in] style The mapping style.
630
- *
631
- * @returns @c 1 if the function succeeded, @c 0 on error.
632
- */
633
-
634
- YAML_DECLARE(int)
635
- yaml_mapping_start_event_initialize(yaml_event_t *event,
636
- const yaml_char_t *anchor, const yaml_char_t *tag, int implicit,
637
- yaml_mapping_style_t style);
638
-
639
- /**
640
- * Create a MAPPING-END event.
641
- *
642
- * @param[out] event An empty event object.
643
- *
644
- * @returns @c 1 if the function succeeded, @c 0 on error.
645
- */
646
-
647
- YAML_DECLARE(int)
648
- yaml_mapping_end_event_initialize(yaml_event_t *event);
649
-
650
- /**
651
- * Free any memory allocated for an event object.
652
- *
653
- * @param[in,out] event An event object.
654
- */
655
-
656
- YAML_DECLARE(void)
657
- yaml_event_delete(yaml_event_t *event);
658
-
659
- /** @} */
660
-
661
- /**
662
- * @defgroup nodes Nodes
663
- * @{
664
- */
665
-
666
- /** The tag @c !!null with the only possible value: @c null. */
667
- #define YAML_NULL_TAG "tag:yaml.org,2002:null"
668
- /** The tag @c !!bool with the values: @c true and @c false. */
669
- #define YAML_BOOL_TAG "tag:yaml.org,2002:bool"
670
- /** The tag @c !!str for string values. */
671
- #define YAML_STR_TAG "tag:yaml.org,2002:str"
672
- /** The tag @c !!int for integer values. */
673
- #define YAML_INT_TAG "tag:yaml.org,2002:int"
674
- /** The tag @c !!float for float values. */
675
- #define YAML_FLOAT_TAG "tag:yaml.org,2002:float"
676
- /** The tag @c !!timestamp for date and time values. */
677
- #define YAML_TIMESTAMP_TAG "tag:yaml.org,2002:timestamp"
678
-
679
- /** The tag @c !!seq is used to denote sequences. */
680
- #define YAML_SEQ_TAG "tag:yaml.org,2002:seq"
681
- /** The tag @c !!map is used to denote mapping. */
682
- #define YAML_MAP_TAG "tag:yaml.org,2002:map"
683
-
684
- /** The default scalar tag is @c !!str. */
685
- #define YAML_DEFAULT_SCALAR_TAG YAML_STR_TAG
686
- /** The default sequence tag is @c !!seq. */
687
- #define YAML_DEFAULT_SEQUENCE_TAG YAML_SEQ_TAG
688
- /** The default mapping tag is @c !!map. */
689
- #define YAML_DEFAULT_MAPPING_TAG YAML_MAP_TAG
690
-
691
- /** Node types. */
692
- typedef enum yaml_node_type_e {
693
- /** An empty node. */
694
- YAML_NO_NODE,
695
-
696
- /** A scalar node. */
697
- YAML_SCALAR_NODE,
698
- /** A sequence node. */
699
- YAML_SEQUENCE_NODE,
700
- /** A mapping node. */
701
- YAML_MAPPING_NODE
702
- } yaml_node_type_t;
703
-
704
- /** The forward definition of a document node structure. */
705
- typedef struct yaml_node_s yaml_node_t;
706
-
707
- /** An element of a sequence node. */
708
- typedef int yaml_node_item_t;
709
-
710
- /** An element of a mapping node. */
711
- typedef struct yaml_node_pair_s {
712
- /** The key of the element. */
713
- int key;
714
- /** The value of the element. */
715
- int value;
716
- } yaml_node_pair_t;
717
-
718
- /** The node structure. */
719
- struct yaml_node_s {
720
-
721
- /** The node type. */
722
- yaml_node_type_t type;
723
-
724
- /** The node tag. */
725
- yaml_char_t *tag;
726
-
727
- /** The node data. */
728
- union {
729
-
730
- /** The scalar parameters (for @c YAML_SCALAR_NODE). */
731
- struct {
732
- /** The scalar value. */
733
- yaml_char_t *value;
734
- /** The length of the scalar value. */
735
- size_t length;
736
- /** The scalar style. */
737
- yaml_scalar_style_t style;
738
- } scalar;
739
-
740
- /** The sequence parameters (for @c YAML_SEQUENCE_NODE). */
741
- struct {
742
- /** The stack of sequence items. */
743
- struct {
744
- /** The beginning of the stack. */
745
- yaml_node_item_t *start;
746
- /** The end of the stack. */
747
- yaml_node_item_t *end;
748
- /** The top of the stack. */
749
- yaml_node_item_t *top;
750
- } items;
751
- /** The sequence style. */
752
- yaml_sequence_style_t style;
753
- } sequence;
754
-
755
- /** The mapping parameters (for @c YAML_MAPPING_NODE). */
756
- struct {
757
- /** The stack of mapping pairs (key, value). */
758
- struct {
759
- /** The beginning of the stack. */
760
- yaml_node_pair_t *start;
761
- /** The end of the stack. */
762
- yaml_node_pair_t *end;
763
- /** The top of the stack. */
764
- yaml_node_pair_t *top;
765
- } pairs;
766
- /** The mapping style. */
767
- yaml_mapping_style_t style;
768
- } mapping;
769
-
770
- } data;
771
-
772
- /** The beginning of the node. */
773
- yaml_mark_t start_mark;
774
- /** The end of the node. */
775
- yaml_mark_t end_mark;
776
-
777
- };
778
-
779
- /** The document structure. */
780
- typedef struct yaml_document_s {
781
-
782
- /** The document nodes. */
783
- struct {
784
- /** The beginning of the stack. */
785
- yaml_node_t *start;
786
- /** The end of the stack. */
787
- yaml_node_t *end;
788
- /** The top of the stack. */
789
- yaml_node_t *top;
790
- } nodes;
791
-
792
- /** The version directive. */
793
- yaml_version_directive_t *version_directive;
794
-
795
- /** The list of tag directives. */
796
- struct {
797
- /** The beginning of the tag directives list. */
798
- yaml_tag_directive_t *start;
799
- /** The end of the tag directives list. */
800
- yaml_tag_directive_t *end;
801
- } tag_directives;
802
-
803
- /** Is the document start indicator implicit? */
804
- int start_implicit;
805
- /** Is the document end indicator implicit? */
806
- int end_implicit;
807
-
808
- /** The beginning of the document. */
809
- yaml_mark_t start_mark;
810
- /** The end of the document. */
811
- yaml_mark_t end_mark;
812
-
813
- } yaml_document_t;
814
-
815
- /**
816
- * Create a YAML document.
817
- *
818
- * @param[out] document An empty document object.
819
- * @param[in] version_directive The %YAML directive value or
820
- * @c NULL.
821
- * @param[in] tag_directives_start The beginning of the %TAG
822
- * directives list.
823
- * @param[in] tag_directives_end The end of the %TAG directives
824
- * list.
825
- * @param[in] start_implicit If the document start indicator is
826
- * implicit.
827
- * @param[in] end_implicit If the document end indicator is
828
- * implicit.
829
- *
830
- * @returns @c 1 if the function succeeded, @c 0 on error.
831
- */
832
-
833
- YAML_DECLARE(int)
834
- yaml_document_initialize(yaml_document_t *document,
835
- yaml_version_directive_t *version_directive,
836
- yaml_tag_directive_t *tag_directives_start,
837
- yaml_tag_directive_t *tag_directives_end,
838
- int start_implicit, int end_implicit);
839
-
840
- /**
841
- * Delete a YAML document and all its nodes.
842
- *
843
- * @param[in,out] document A document object.
844
- */
845
-
846
- YAML_DECLARE(void)
847
- yaml_document_delete(yaml_document_t *document);
848
-
849
- /**
850
- * Get a node of a YAML document.
851
- *
852
- * The pointer returned by this function is valid until any of the functions
853
- * modifying the documents are called.
854
- *
855
- * @param[in] document A document object.
856
- * @param[in] index The node id.
857
- *
858
- * @returns the node objct or @c NULL if @c node_id is out of range.
859
- */
860
-
861
- YAML_DECLARE(yaml_node_t *)
862
- yaml_document_get_node(yaml_document_t *document, int index);
863
-
864
- /**
865
- * Get the root of a YAML document node.
866
- *
867
- * The root object is the first object added to the document.
868
- *
869
- * The pointer returned by this function is valid until any of the functions
870
- * modifying the documents are called.
871
- *
872
- * An empty document produced by the parser signifies the end of a YAML
873
- * stream.
874
- *
875
- * @param[in] document A document object.
876
- *
877
- * @returns the node object or @c NULL if the document is empty.
878
- */
879
-
880
- YAML_DECLARE(yaml_node_t *)
881
- yaml_document_get_root_node(yaml_document_t *document);
882
-
883
- /**
884
- * Create a SCALAR node and attach it to the document.
885
- *
886
- * The @a style argument may be ignored by the emitter.
887
- *
888
- * @param[in,out] document A document object.
889
- * @param[in] tag The scalar tag.
890
- * @param[in] value The scalar value.
891
- * @param[in] length The length of the scalar value.
892
- * @param[in] style The scalar style.
893
- *
894
- * @returns the node id or @c 0 on error.
895
- */
896
-
897
- YAML_DECLARE(int)
898
- yaml_document_add_scalar(yaml_document_t *document,
899
- const yaml_char_t *tag, const yaml_char_t *value, int length,
900
- yaml_scalar_style_t style);
901
-
902
- /**
903
- * Create a SEQUENCE node and attach it to the document.
904
- *
905
- * The @a style argument may be ignored by the emitter.
906
- *
907
- * @param[in,out] document A document object.
908
- * @param[in] tag The sequence tag.
909
- * @param[in] style The sequence style.
910
- *
911
- * @returns the node id or @c 0 on error.
912
- */
913
-
914
- YAML_DECLARE(int)
915
- yaml_document_add_sequence(yaml_document_t *document,
916
- const yaml_char_t *tag, yaml_sequence_style_t style);
917
-
918
- /**
919
- * Create a MAPPING node and attach it to the document.
920
- *
921
- * The @a style argument may be ignored by the emitter.
922
- *
923
- * @param[in,out] document A document object.
924
- * @param[in] tag The sequence tag.
925
- * @param[in] style The sequence style.
926
- *
927
- * @returns the node id or @c 0 on error.
928
- */
929
-
930
- YAML_DECLARE(int)
931
- yaml_document_add_mapping(yaml_document_t *document,
932
- const yaml_char_t *tag, yaml_mapping_style_t style);
933
-
934
- /**
935
- * Add an item to a SEQUENCE node.
936
- *
937
- * @param[in,out] document A document object.
938
- * @param[in] sequence The sequence node id.
939
- * @param[in] item The item node id.
940
- *
941
- * @returns @c 1 if the function succeeded, @c 0 on error.
942
- */
943
-
944
- YAML_DECLARE(int)
945
- yaml_document_append_sequence_item(yaml_document_t *document,
946
- int sequence, int item);
947
-
948
- /**
949
- * Add a pair of a key and a value to a MAPPING node.
950
- *
951
- * @param[in,out] document A document object.
952
- * @param[in] mapping The mapping node id.
953
- * @param[in] key The key node id.
954
- * @param[in] value The value node id.
955
- *
956
- * @returns @c 1 if the function succeeded, @c 0 on error.
957
- */
958
-
959
- YAML_DECLARE(int)
960
- yaml_document_append_mapping_pair(yaml_document_t *document,
961
- int mapping, int key, int value);
962
-
963
- /** @} */
964
-
965
- /**
966
- * @defgroup parser Parser Definitions
967
- * @{
968
- */
969
-
970
- /**
971
- * The prototype of a read handler.
972
- *
973
- * The read handler is called when the parser needs to read more bytes from the
974
- * source. The handler should write not more than @a size bytes to the @a
975
- * buffer. The number of written bytes should be set to the @a length variable.
976
- *
977
- * @param[in,out] data A pointer to an application data specified by
978
- * yaml_parser_set_input().
979
- * @param[out] buffer The buffer to write the data from the source.
980
- * @param[in] size The size of the buffer.
981
- * @param[out] size_read The actual number of bytes read from the source.
982
- *
983
- * @returns On success, the handler should return @c 1. If the handler failed,
984
- * the returned value should be @c 0. On EOF, the handler should set the
985
- * @a size_read to @c 0 and return @c 1.
986
- */
987
-
988
- typedef int yaml_read_handler_t(void *data, unsigned char *buffer, size_t size,
989
- size_t *size_read);
990
-
991
- /**
992
- * This structure holds information about a potential simple key.
993
- */
994
-
995
- typedef struct yaml_simple_key_s {
996
- /** Is a simple key possible? */
997
- int possible;
998
-
999
- /** Is a simple key required? */
1000
- int required;
1001
-
1002
- /** The number of the token. */
1003
- size_t token_number;
1004
-
1005
- /** The position mark. */
1006
- yaml_mark_t mark;
1007
- } yaml_simple_key_t;
1008
-
1009
- /**
1010
- * The states of the parser.
1011
- */
1012
- typedef enum yaml_parser_state_e {
1013
- /** Expect STREAM-START. */
1014
- YAML_PARSE_STREAM_START_STATE,
1015
- /** Expect the beginning of an implicit document. */
1016
- YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE,
1017
- /** Expect DOCUMENT-START. */
1018
- YAML_PARSE_DOCUMENT_START_STATE,
1019
- /** Expect the content of a document. */
1020
- YAML_PARSE_DOCUMENT_CONTENT_STATE,
1021
- /** Expect DOCUMENT-END. */
1022
- YAML_PARSE_DOCUMENT_END_STATE,
1023
-
1024
- /** Expect a block node. */
1025
- YAML_PARSE_BLOCK_NODE_STATE,
1026
- /** Expect a block node or indentless sequence. */
1027
- YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE,
1028
- /** Expect a flow node. */
1029
- YAML_PARSE_FLOW_NODE_STATE,
1030
- /** Expect the first entry of a block sequence. */
1031
- YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE,
1032
- /** Expect an entry of a block sequence. */
1033
- YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE,
1034
-
1035
- /** Expect an entry of an indentless sequence. */
1036
- YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE,
1037
- /** Expect the first key of a block mapping. */
1038
- YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE,
1039
- /** Expect a block mapping key. */
1040
- YAML_PARSE_BLOCK_MAPPING_KEY_STATE,
1041
- /** Expect a block mapping value. */
1042
- YAML_PARSE_BLOCK_MAPPING_VALUE_STATE,
1043
- /** Expect the first entry of a flow sequence. */
1044
- YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE,
1045
-
1046
- /** Expect an entry of a flow sequence. */
1047
- YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE,
1048
- /** Expect a key of an ordered mapping. */
1049
- YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE,
1050
- /** Expect a value of an ordered mapping. */
1051
- YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE,
1052
- /** Expect the and of an ordered mapping entry. */
1053
- YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE,
1054
- /** Expect the first key of a flow mapping. */
1055
- YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE,
1056
- /** Expect a key of a flow mapping. */
1057
-
1058
- YAML_PARSE_FLOW_MAPPING_KEY_STATE,
1059
- /** Expect a value of a flow mapping. */
1060
- YAML_PARSE_FLOW_MAPPING_VALUE_STATE,
1061
- /** Expect an empty value of a flow mapping. */
1062
- YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE,
1063
- /** Expect nothing. */
1064
- YAML_PARSE_END_STATE
1065
- } yaml_parser_state_t;
1066
-
1067
- /**
1068
- * This structure holds aliases data.
1069
- */
1070
-
1071
- typedef struct yaml_alias_data_s {
1072
- /** The anchor. */
1073
- yaml_char_t *anchor;
1074
- /** The node id. */
1075
- int index;
1076
- /** The anchor mark. */
1077
- yaml_mark_t mark;
1078
- } yaml_alias_data_t;
1079
-
1080
- /**
1081
- * The parser structure.
1082
- *
1083
- * All members are internal. Manage the structure using the @c yaml_parser_
1084
- * family of functions.
1085
- */
1086
-
1087
- typedef struct yaml_parser_s {
1088
-
1089
- /**
1090
- * @name Error handling
1091
- * @{
1092
- */
1093
-
1094
- /** Error type. */
1095
- yaml_error_type_t error;
1096
- /** Error description. */
1097
- const char *problem;
1098
- /** The byte about which the problem occurred. */
1099
- size_t problem_offset;
1100
- /** The problematic value (@c -1 is none). */
1101
- int problem_value;
1102
- /** The problem position. */
1103
- yaml_mark_t problem_mark;
1104
- /** The error context. */
1105
- const char *context;
1106
- /** The context position. */
1107
- yaml_mark_t context_mark;
1108
-
1109
- /**
1110
- * @}
1111
- */
1112
-
1113
- /**
1114
- * @name Reader stuff
1115
- * @{
1116
- */
1117
-
1118
- /** Read handler. */
1119
- yaml_read_handler_t *read_handler;
1120
-
1121
- /** A pointer for passing to the read handler. */
1122
- void *read_handler_data;
1123
-
1124
- /** Standard (string or file) input data. */
1125
- union {
1126
- /** String input data. */
1127
- struct {
1128
- /** The string start pointer. */
1129
- const unsigned char *start;
1130
- /** The string end pointer. */
1131
- const unsigned char *end;
1132
- /** The string current position. */
1133
- const unsigned char *current;
1134
- } string;
1135
-
1136
- /** File input data. */
1137
- FILE *file;
1138
- } input;
1139
-
1140
- /** EOF flag */
1141
- int eof;
1142
-
1143
- /** The working buffer. */
1144
- struct {
1145
- /** The beginning of the buffer. */
1146
- yaml_char_t *start;
1147
- /** The end of the buffer. */
1148
- yaml_char_t *end;
1149
- /** The current position of the buffer. */
1150
- yaml_char_t *pointer;
1151
- /** The last filled position of the buffer. */
1152
- yaml_char_t *last;
1153
- } buffer;
1154
-
1155
- /* The number of unread characters in the buffer. */
1156
- size_t unread;
1157
-
1158
- /** The raw buffer. */
1159
- struct {
1160
- /** The beginning of the buffer. */
1161
- unsigned char *start;
1162
- /** The end of the buffer. */
1163
- unsigned char *end;
1164
- /** The current position of the buffer. */
1165
- unsigned char *pointer;
1166
- /** The last filled position of the buffer. */
1167
- unsigned char *last;
1168
- } raw_buffer;
1169
-
1170
- /** The input encoding. */
1171
- yaml_encoding_t encoding;
1172
-
1173
- /** The offset of the current position (in bytes). */
1174
- size_t offset;
1175
-
1176
- /** The mark of the current position. */
1177
- yaml_mark_t mark;
1178
-
1179
- /**
1180
- * @}
1181
- */
1182
-
1183
- /**
1184
- * @name Scanner stuff
1185
- * @{
1186
- */
1187
-
1188
- /** Have we started to scan the input stream? */
1189
- int stream_start_produced;
1190
-
1191
- /** Have we reached the end of the input stream? */
1192
- int stream_end_produced;
1193
-
1194
- /** The number of unclosed '[' and '{' indicators. */
1195
- int flow_level;
1196
-
1197
- /** The tokens queue. */
1198
- struct {
1199
- /** The beginning of the tokens queue. */
1200
- yaml_token_t *start;
1201
- /** The end of the tokens queue. */
1202
- yaml_token_t *end;
1203
- /** The head of the tokens queue. */
1204
- yaml_token_t *head;
1205
- /** The tail of the tokens queue. */
1206
- yaml_token_t *tail;
1207
- } tokens;
1208
-
1209
- /** The number of tokens fetched from the queue. */
1210
- size_t tokens_parsed;
1211
-
1212
- /** Does the tokens queue contain a token ready for dequeueing. */
1213
- int token_available;
1214
-
1215
- /** The indentation levels stack. */
1216
- struct {
1217
- /** The beginning of the stack. */
1218
- int *start;
1219
- /** The end of the stack. */
1220
- int *end;
1221
- /** The top of the stack. */
1222
- int *top;
1223
- } indents;
1224
-
1225
- /** The current indentation level. */
1226
- int indent;
1227
-
1228
- /** May a simple key occur at the current position? */
1229
- int simple_key_allowed;
1230
-
1231
- /** The stack of simple keys. */
1232
- struct {
1233
- /** The beginning of the stack. */
1234
- yaml_simple_key_t *start;
1235
- /** The end of the stack. */
1236
- yaml_simple_key_t *end;
1237
- /** The top of the stack. */
1238
- yaml_simple_key_t *top;
1239
- } simple_keys;
1240
-
1241
- /**
1242
- * @}
1243
- */
1244
-
1245
- /**
1246
- * @name Parser stuff
1247
- * @{
1248
- */
1249
-
1250
- /** The parser states stack. */
1251
- struct {
1252
- /** The beginning of the stack. */
1253
- yaml_parser_state_t *start;
1254
- /** The end of the stack. */
1255
- yaml_parser_state_t *end;
1256
- /** The top of the stack. */
1257
- yaml_parser_state_t *top;
1258
- } states;
1259
-
1260
- /** The current parser state. */
1261
- yaml_parser_state_t state;
1262
-
1263
- /** The stack of marks. */
1264
- struct {
1265
- /** The beginning of the stack. */
1266
- yaml_mark_t *start;
1267
- /** The end of the stack. */
1268
- yaml_mark_t *end;
1269
- /** The top of the stack. */
1270
- yaml_mark_t *top;
1271
- } marks;
1272
-
1273
- /** The list of TAG directives. */
1274
- struct {
1275
- /** The beginning of the list. */
1276
- yaml_tag_directive_t *start;
1277
- /** The end of the list. */
1278
- yaml_tag_directive_t *end;
1279
- /** The top of the list. */
1280
- yaml_tag_directive_t *top;
1281
- } tag_directives;
1282
-
1283
- /**
1284
- * @}
1285
- */
1286
-
1287
- /**
1288
- * @name Dumper stuff
1289
- * @{
1290
- */
1291
-
1292
- /** The alias data. */
1293
- struct {
1294
- /** The beginning of the list. */
1295
- yaml_alias_data_t *start;
1296
- /** The end of the list. */
1297
- yaml_alias_data_t *end;
1298
- /** The top of the list. */
1299
- yaml_alias_data_t *top;
1300
- } aliases;
1301
-
1302
- /** The currently parsed document. */
1303
- yaml_document_t *document;
1304
-
1305
- /**
1306
- * @}
1307
- */
1308
-
1309
- } yaml_parser_t;
1310
-
1311
- /**
1312
- * Initialize a parser.
1313
- *
1314
- * This function creates a new parser object. An application is responsible
1315
- * for destroying the object using the yaml_parser_delete() function.
1316
- *
1317
- * @param[out] parser An empty parser object.
1318
- *
1319
- * @returns @c 1 if the function succeeded, @c 0 on error.
1320
- */
1321
-
1322
- YAML_DECLARE(int)
1323
- yaml_parser_initialize(yaml_parser_t *parser);
1324
-
1325
- /**
1326
- * Destroy a parser.
1327
- *
1328
- * @param[in,out] parser A parser object.
1329
- */
1330
-
1331
- YAML_DECLARE(void)
1332
- yaml_parser_delete(yaml_parser_t *parser);
1333
-
1334
- /**
1335
- * Set a string input.
1336
- *
1337
- * Note that the @a input pointer must be valid while the @a parser object
1338
- * exists. The application is responsible for destroying @a input after
1339
- * destroying the @a parser.
1340
- *
1341
- * @param[in,out] parser A parser object.
1342
- * @param[in] input A source data.
1343
- * @param[in] size The length of the source data in bytes.
1344
- */
1345
-
1346
- YAML_DECLARE(void)
1347
- yaml_parser_set_input_string(yaml_parser_t *parser,
1348
- const unsigned char *input, size_t size);
1349
-
1350
- /**
1351
- * Set a file input.
1352
- *
1353
- * @a file should be a file object open for reading. The application is
1354
- * responsible for closing the @a file.
1355
- *
1356
- * @param[in,out] parser A parser object.
1357
- * @param[in] file An open file.
1358
- */
1359
-
1360
- YAML_DECLARE(void)
1361
- yaml_parser_set_input_file(yaml_parser_t *parser, FILE *file);
1362
-
1363
- /**
1364
- * Set a generic input handler.
1365
- *
1366
- * @param[in,out] parser A parser object.
1367
- * @param[in] handler A read handler.
1368
- * @param[in] data Any application data for passing to the read
1369
- * handler.
1370
- */
1371
-
1372
- YAML_DECLARE(void)
1373
- yaml_parser_set_input(yaml_parser_t *parser,
1374
- yaml_read_handler_t *handler, void *data);
1375
-
1376
- /**
1377
- * Set the source encoding.
1378
- *
1379
- * @param[in,out] parser A parser object.
1380
- * @param[in] encoding The source encoding.
1381
- */
1382
-
1383
- YAML_DECLARE(void)
1384
- yaml_parser_set_encoding(yaml_parser_t *parser, yaml_encoding_t encoding);
1385
-
1386
- /**
1387
- * Scan the input stream and produce the next token.
1388
- *
1389
- * Call the function subsequently to produce a sequence of tokens corresponding
1390
- * to the input stream. The initial token has the type
1391
- * @c YAML_STREAM_START_TOKEN while the ending token has the type
1392
- * @c YAML_STREAM_END_TOKEN.
1393
- *
1394
- * An application is responsible for freeing any buffers associated with the
1395
- * produced token object using the @c yaml_token_delete function.
1396
- *
1397
- * An application must not alternate the calls of yaml_parser_scan() with the
1398
- * calls of yaml_parser_parse() or yaml_parser_load(). Doing this will break
1399
- * the parser.
1400
- *
1401
- * @param[in,out] parser A parser object.
1402
- * @param[out] token An empty token object.
1403
- *
1404
- * @returns @c 1 if the function succeeded, @c 0 on error.
1405
- */
1406
-
1407
- YAML_DECLARE(int)
1408
- yaml_parser_scan(yaml_parser_t *parser, yaml_token_t *token);
1409
-
1410
- /**
1411
- * Parse the input stream and produce the next parsing event.
1412
- *
1413
- * Call the function subsequently to produce a sequence of events corresponding
1414
- * to the input stream. The initial event has the type
1415
- * @c YAML_STREAM_START_EVENT while the ending event has the type
1416
- * @c YAML_STREAM_END_EVENT.
1417
- *
1418
- * An application is responsible for freeing any buffers associated with the
1419
- * produced event object using the yaml_event_delete() function.
1420
- *
1421
- * An application must not alternate the calls of yaml_parser_parse() with the
1422
- * calls of yaml_parser_scan() or yaml_parser_load(). Doing this will break the
1423
- * parser.
1424
- *
1425
- * @param[in,out] parser A parser object.
1426
- * @param[out] event An empty event object.
1427
- *
1428
- * @returns @c 1 if the function succeeded, @c 0 on error.
1429
- */
1430
-
1431
- YAML_DECLARE(int)
1432
- yaml_parser_parse(yaml_parser_t *parser, yaml_event_t *event);
1433
-
1434
- /**
1435
- * Parse the input stream and produce the next YAML document.
1436
- *
1437
- * Call this function subsequently to produce a sequence of documents
1438
- * constituting the input stream.
1439
- *
1440
- * If the produced document has no root node, it means that the document
1441
- * end has been reached.
1442
- *
1443
- * An application is responsible for freeing any data associated with the
1444
- * produced document object using the yaml_document_delete() function.
1445
- *
1446
- * An application must not alternate the calls of yaml_parser_load() with the
1447
- * calls of yaml_parser_scan() or yaml_parser_parse(). Doing this will break
1448
- * the parser.
1449
- *
1450
- * @param[in,out] parser A parser object.
1451
- * @param[out] document An empty document object.
1452
- *
1453
- * @returns @c 1 if the function succeeded, @c 0 on error.
1454
- */
1455
-
1456
- YAML_DECLARE(int)
1457
- yaml_parser_load(yaml_parser_t *parser, yaml_document_t *document);
1458
-
1459
- /** @} */
1460
-
1461
- /**
1462
- * @defgroup emitter Emitter Definitions
1463
- * @{
1464
- */
1465
-
1466
- /**
1467
- * The prototype of a write handler.
1468
- *
1469
- * The write handler is called when the emitter needs to flush the accumulated
1470
- * characters to the output. The handler should write @a size bytes of the
1471
- * @a buffer to the output.
1472
- *
1473
- * @param[in,out] data A pointer to an application data specified by
1474
- * yaml_emitter_set_output().
1475
- * @param[in] buffer The buffer with bytes to be written.
1476
- * @param[in] size The size of the buffer.
1477
- *
1478
- * @returns On success, the handler should return @c 1. If the handler failed,
1479
- * the returned value should be @c 0.
1480
- */
1481
-
1482
- typedef int yaml_write_handler_t(void *data, unsigned char *buffer, size_t size);
1483
-
1484
- /** The emitter states. */
1485
- typedef enum yaml_emitter_state_e {
1486
- /** Expect STREAM-START. */
1487
- YAML_EMIT_STREAM_START_STATE,
1488
- /** Expect the first DOCUMENT-START or STREAM-END. */
1489
- YAML_EMIT_FIRST_DOCUMENT_START_STATE,
1490
- /** Expect DOCUMENT-START or STREAM-END. */
1491
- YAML_EMIT_DOCUMENT_START_STATE,
1492
- /** Expect the content of a document. */
1493
- YAML_EMIT_DOCUMENT_CONTENT_STATE,
1494
- /** Expect DOCUMENT-END. */
1495
- YAML_EMIT_DOCUMENT_END_STATE,
1496
-
1497
- /** Expect the first item of a flow sequence. */
1498
- YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE,
1499
- /** Expect an item of a flow sequence. */
1500
- YAML_EMIT_FLOW_SEQUENCE_ITEM_STATE,
1501
- /** Expect the first key of a flow mapping. */
1502
- YAML_EMIT_FLOW_MAPPING_FIRST_KEY_STATE,
1503
- /** Expect a key of a flow mapping. */
1504
- YAML_EMIT_FLOW_MAPPING_KEY_STATE,
1505
- /** Expect a value for a simple key of a flow mapping. */
1506
- YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE,
1507
-
1508
- /** Expect a value of a flow mapping. */
1509
- YAML_EMIT_FLOW_MAPPING_VALUE_STATE,
1510
- /** Expect the first item of a block sequence. */
1511
- YAML_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE,
1512
- /** Expect an item of a block sequence. */
1513
- YAML_EMIT_BLOCK_SEQUENCE_ITEM_STATE,
1514
- /** Expect the first key of a block mapping. */
1515
- YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE,
1516
- /** Expect the key of a block mapping. */
1517
- YAML_EMIT_BLOCK_MAPPING_KEY_STATE,
1518
-
1519
- /** Expect a value for a simple key of a block mapping. */
1520
- YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE,
1521
- /** Expect a value of a block mapping. */
1522
- YAML_EMIT_BLOCK_MAPPING_VALUE_STATE,
1523
- /** Expect nothing. */
1524
- YAML_EMIT_END_STATE
1525
- } yaml_emitter_state_t;
1526
-
1527
-
1528
- /* This is needed for C++ */
1529
-
1530
- typedef struct yaml_anchors_s {
1531
- /** The number of references. */
1532
- int references;
1533
- /** The anchor id. */
1534
- int anchor;
1535
- /** If the node has been emitted? */
1536
- int serialized;
1537
- } yaml_anchors_t;
1538
-
1539
- /**
1540
- * The emitter structure.
1541
- *
1542
- * All members are internal. Manage the structure using the @c yaml_emitter_
1543
- * family of functions.
1544
- */
1545
-
1546
- typedef struct yaml_emitter_s {
1547
-
1548
- /**
1549
- * @name Error handling
1550
- * @{
1551
- */
1552
-
1553
- /** Error type. */
1554
- yaml_error_type_t error;
1555
- /** Error description. */
1556
- const char *problem;
1557
-
1558
- /**
1559
- * @}
1560
- */
1561
-
1562
- /**
1563
- * @name Writer stuff
1564
- * @{
1565
- */
1566
-
1567
- /** Write handler. */
1568
- yaml_write_handler_t *write_handler;
1569
-
1570
- /** A pointer for passing to the write handler. */
1571
- void *write_handler_data;
1572
-
1573
- /** Standard (string or file) output data. */
1574
- union {
1575
- /** String output data. */
1576
- struct {
1577
- /** The buffer pointer. */
1578
- unsigned char *buffer;
1579
- /** The buffer size. */
1580
- size_t size;
1581
- /** The number of written bytes. */
1582
- size_t *size_written;
1583
- } string;
1584
-
1585
- /** File output data. */
1586
- FILE *file;
1587
- } output;
1588
-
1589
- /** The working buffer. */
1590
- struct {
1591
- /** The beginning of the buffer. */
1592
- yaml_char_t *start;
1593
- /** The end of the buffer. */
1594
- yaml_char_t *end;
1595
- /** The current position of the buffer. */
1596
- yaml_char_t *pointer;
1597
- /** The last filled position of the buffer. */
1598
- yaml_char_t *last;
1599
- } buffer;
1600
-
1601
- /** The raw buffer. */
1602
- struct {
1603
- /** The beginning of the buffer. */
1604
- unsigned char *start;
1605
- /** The end of the buffer. */
1606
- unsigned char *end;
1607
- /** The current position of the buffer. */
1608
- unsigned char *pointer;
1609
- /** The last filled position of the buffer. */
1610
- unsigned char *last;
1611
- } raw_buffer;
1612
-
1613
- /** The stream encoding. */
1614
- yaml_encoding_t encoding;
1615
-
1616
- /**
1617
- * @}
1618
- */
1619
-
1620
- /**
1621
- * @name Emitter stuff
1622
- * @{
1623
- */
1624
-
1625
- /** If the output is in the canonical style? */
1626
- int canonical;
1627
- /** The number of indentation spaces. */
1628
- int best_indent;
1629
- /** The preferred width of the output lines. */
1630
- int best_width;
1631
- /** Allow unescaped non-ASCII characters? */
1632
- int unicode;
1633
- /** The preferred line break. */
1634
- yaml_break_t line_break;
1635
-
1636
- /** The stack of states. */
1637
- struct {
1638
- /** The beginning of the stack. */
1639
- yaml_emitter_state_t *start;
1640
- /** The end of the stack. */
1641
- yaml_emitter_state_t *end;
1642
- /** The top of the stack. */
1643
- yaml_emitter_state_t *top;
1644
- } states;
1645
-
1646
- /** The current emitter state. */
1647
- yaml_emitter_state_t state;
1648
-
1649
- /** The event queue. */
1650
- struct {
1651
- /** The beginning of the event queue. */
1652
- yaml_event_t *start;
1653
- /** The end of the event queue. */
1654
- yaml_event_t *end;
1655
- /** The head of the event queue. */
1656
- yaml_event_t *head;
1657
- /** The tail of the event queue. */
1658
- yaml_event_t *tail;
1659
- } events;
1660
-
1661
- /** The stack of indentation levels. */
1662
- struct {
1663
- /** The beginning of the stack. */
1664
- int *start;
1665
- /** The end of the stack. */
1666
- int *end;
1667
- /** The top of the stack. */
1668
- int *top;
1669
- } indents;
1670
-
1671
- /** The list of tag directives. */
1672
- struct {
1673
- /** The beginning of the list. */
1674
- yaml_tag_directive_t *start;
1675
- /** The end of the list. */
1676
- yaml_tag_directive_t *end;
1677
- /** The top of the list. */
1678
- yaml_tag_directive_t *top;
1679
- } tag_directives;
1680
-
1681
- /** The current indentation level. */
1682
- int indent;
1683
-
1684
- /** The current flow level. */
1685
- int flow_level;
1686
-
1687
- /** Is it the document root context? */
1688
- int root_context;
1689
- /** Is it a sequence context? */
1690
- int sequence_context;
1691
- /** Is it a mapping context? */
1692
- int mapping_context;
1693
- /** Is it a simple mapping key context? */
1694
- int simple_key_context;
1695
-
1696
- /** The current line. */
1697
- int line;
1698
- /** The current column. */
1699
- int column;
1700
- /** If the last character was a whitespace? */
1701
- int whitespace;
1702
- /** If the last character was an indentation character (' ', '-', '?', ':')? */
1703
- int indention;
1704
- /** If an explicit document end is required? */
1705
- int open_ended;
1706
-
1707
- /** Anchor analysis. */
1708
- struct {
1709
- /** The anchor value. */
1710
- yaml_char_t *anchor;
1711
- /** The anchor length. */
1712
- size_t anchor_length;
1713
- /** Is it an alias? */
1714
- int alias;
1715
- } anchor_data;
1716
-
1717
- /** Tag analysis. */
1718
- struct {
1719
- /** The tag handle. */
1720
- yaml_char_t *handle;
1721
- /** The tag handle length. */
1722
- size_t handle_length;
1723
- /** The tag suffix. */
1724
- yaml_char_t *suffix;
1725
- /** The tag suffix length. */
1726
- size_t suffix_length;
1727
- } tag_data;
1728
-
1729
- /** Scalar analysis. */
1730
- struct {
1731
- /** The scalar value. */
1732
- yaml_char_t *value;
1733
- /** The scalar length. */
1734
- size_t length;
1735
- /** Does the scalar contain line breaks? */
1736
- int multiline;
1737
- /** Can the scalar be expressed in the flow plain style? */
1738
- int flow_plain_allowed;
1739
- /** Can the scalar be expressed in the block plain style? */
1740
- int block_plain_allowed;
1741
- /** Can the scalar be expressed in the single quoted style? */
1742
- int single_quoted_allowed;
1743
- /** Can the scalar be expressed in the literal or folded styles? */
1744
- int block_allowed;
1745
- /** The output style. */
1746
- yaml_scalar_style_t style;
1747
- } scalar_data;
1748
-
1749
- /**
1750
- * @}
1751
- */
1752
-
1753
- /**
1754
- * @name Dumper stuff
1755
- * @{
1756
- */
1757
-
1758
- /** If the stream was already opened? */
1759
- int opened;
1760
- /** If the stream was already closed? */
1761
- int closed;
1762
-
1763
- /** The information associated with the document nodes. */
1764
- yaml_anchors_t *anchors;
1765
-
1766
- /** The last assigned anchor id. */
1767
- int last_anchor_id;
1768
-
1769
- /** The currently emitted document. */
1770
- yaml_document_t *document;
1771
-
1772
- /**
1773
- * @}
1774
- */
1775
-
1776
- } yaml_emitter_t;
1777
-
1778
- /**
1779
- * Initialize an emitter.
1780
- *
1781
- * This function creates a new emitter object. An application is responsible
1782
- * for destroying the object using the yaml_emitter_delete() function.
1783
- *
1784
- * @param[out] emitter An empty parser object.
1785
- *
1786
- * @returns @c 1 if the function succeeded, @c 0 on error.
1787
- */
1788
-
1789
- YAML_DECLARE(int)
1790
- yaml_emitter_initialize(yaml_emitter_t *emitter);
1791
-
1792
- /**
1793
- * Destroy an emitter.
1794
- *
1795
- * @param[in,out] emitter An emitter object.
1796
- */
1797
-
1798
- YAML_DECLARE(void)
1799
- yaml_emitter_delete(yaml_emitter_t *emitter);
1800
-
1801
- /**
1802
- * Set a string output.
1803
- *
1804
- * The emitter will write the output characters to the @a output buffer of the
1805
- * size @a size. The emitter will set @a size_written to the number of written
1806
- * bytes. If the buffer is smaller than required, the emitter produces the
1807
- * YAML_WRITE_ERROR error.
1808
- *
1809
- * @param[in,out] emitter An emitter object.
1810
- * @param[in] output An output buffer.
1811
- * @param[in] size The buffer size.
1812
- * @param[in] size_written The pointer to save the number of written
1813
- * bytes.
1814
- */
1815
-
1816
- YAML_DECLARE(void)
1817
- yaml_emitter_set_output_string(yaml_emitter_t *emitter,
1818
- unsigned char *output, size_t size, size_t *size_written);
1819
-
1820
- /**
1821
- * Set a file output.
1822
- *
1823
- * @a file should be a file object open for writing. The application is
1824
- * responsible for closing the @a file.
1825
- *
1826
- * @param[in,out] emitter An emitter object.
1827
- * @param[in] file An open file.
1828
- */
1829
-
1830
- YAML_DECLARE(void)
1831
- yaml_emitter_set_output_file(yaml_emitter_t *emitter, FILE *file);
1832
-
1833
- /**
1834
- * Set a generic output handler.
1835
- *
1836
- * @param[in,out] emitter An emitter object.
1837
- * @param[in] handler A write handler.
1838
- * @param[in] data Any application data for passing to the write
1839
- * handler.
1840
- */
1841
-
1842
- YAML_DECLARE(void)
1843
- yaml_emitter_set_output(yaml_emitter_t *emitter,
1844
- yaml_write_handler_t *handler, void *data);
1845
-
1846
- /**
1847
- * Set the output encoding.
1848
- *
1849
- * @param[in,out] emitter An emitter object.
1850
- * @param[in] encoding The output encoding.
1851
- */
1852
-
1853
- YAML_DECLARE(void)
1854
- yaml_emitter_set_encoding(yaml_emitter_t *emitter, yaml_encoding_t encoding);
1855
-
1856
- /**
1857
- * Set if the output should be in the "canonical" format as in the YAML
1858
- * specification.
1859
- *
1860
- * @param[in,out] emitter An emitter object.
1861
- * @param[in] canonical If the output is canonical.
1862
- */
1863
-
1864
- YAML_DECLARE(void)
1865
- yaml_emitter_set_canonical(yaml_emitter_t *emitter, int canonical);
1866
-
1867
- /**
1868
- * Set the indentation increment.
1869
- *
1870
- * @param[in,out] emitter An emitter object.
1871
- * @param[in] indent The indentation increment (1 < . < 10).
1872
- */
1873
-
1874
- YAML_DECLARE(void)
1875
- yaml_emitter_set_indent(yaml_emitter_t *emitter, int indent);
1876
-
1877
- /**
1878
- * Set the preferred line width. @c -1 means unlimited.
1879
- *
1880
- * @param[in,out] emitter An emitter object.
1881
- * @param[in] width The preferred line width.
1882
- */
1883
-
1884
- YAML_DECLARE(void)
1885
- yaml_emitter_set_width(yaml_emitter_t *emitter, int width);
1886
-
1887
- /**
1888
- * Set if unescaped non-ASCII characters are allowed.
1889
- *
1890
- * @param[in,out] emitter An emitter object.
1891
- * @param[in] unicode If unescaped Unicode characters are allowed.
1892
- */
1893
-
1894
- YAML_DECLARE(void)
1895
- yaml_emitter_set_unicode(yaml_emitter_t *emitter, int unicode);
1896
-
1897
- /**
1898
- * Set the preferred line break.
1899
- *
1900
- * @param[in,out] emitter An emitter object.
1901
- * @param[in] line_break The preferred line break.
1902
- */
1903
-
1904
- YAML_DECLARE(void)
1905
- yaml_emitter_set_break(yaml_emitter_t *emitter, yaml_break_t line_break);
1906
-
1907
- /**
1908
- * Emit an event.
1909
- *
1910
- * The event object may be generated using the yaml_parser_parse() function.
1911
- * The emitter takes the responsibility for the event object and destroys its
1912
- * content after it is emitted. The event object is destroyed even if the
1913
- * function fails.
1914
- *
1915
- * @param[in,out] emitter An emitter object.
1916
- * @param[in,out] event An event object.
1917
- *
1918
- * @returns @c 1 if the function succeeded, @c 0 on error.
1919
- */
1920
-
1921
- YAML_DECLARE(int)
1922
- yaml_emitter_emit(yaml_emitter_t *emitter, yaml_event_t *event);
1923
-
1924
- /**
1925
- * Start a YAML stream.
1926
- *
1927
- * This function should be used before yaml_emitter_dump() is called.
1928
- *
1929
- * @param[in,out] emitter An emitter object.
1930
- *
1931
- * @returns @c 1 if the function succeeded, @c 0 on error.
1932
- */
1933
-
1934
- YAML_DECLARE(int)
1935
- yaml_emitter_open(yaml_emitter_t *emitter);
1936
-
1937
- /**
1938
- * Finish a YAML stream.
1939
- *
1940
- * This function should be used after yaml_emitter_dump() is called.
1941
- *
1942
- * @param[in,out] emitter An emitter object.
1943
- *
1944
- * @returns @c 1 if the function succeeded, @c 0 on error.
1945
- */
1946
-
1947
- YAML_DECLARE(int)
1948
- yaml_emitter_close(yaml_emitter_t *emitter);
1949
-
1950
- /**
1951
- * Emit a YAML document.
1952
- *
1953
- * The document object may be generated using the yaml_parser_load() function
1954
- * or the yaml_document_initialize() function. The emitter takes the
1955
- * responsibility for the document object and destroys its content after
1956
- * it is emitted. The document object is destroyed even if the function fails.
1957
- *
1958
- * @param[in,out] emitter An emitter object.
1959
- * @param[in,out] document A document object.
1960
- *
1961
- * @returns @c 1 if the function succeeded, @c 0 on error.
1962
- */
1963
-
1964
- YAML_DECLARE(int)
1965
- yaml_emitter_dump(yaml_emitter_t *emitter, yaml_document_t *document);
1966
-
1967
- /**
1968
- * Flush the accumulated characters to the output.
1969
- *
1970
- * @param[in,out] emitter An emitter object.
1971
- *
1972
- * @returns @c 1 if the function succeeded, @c 0 on error.
1973
- */
1974
-
1975
- YAML_DECLARE(int)
1976
- yaml_emitter_flush(yaml_emitter_t *emitter);
1977
-
1978
- /** @} */
1979
-
1980
- #ifdef __cplusplus
1981
- }
1982
- #endif
1983
-
1984
- #endif /* #ifndef YAML_H */
1985
-