annotate yaml/src/dumper.c @ 45:6179fdcc550a

duktape: upgrade to 2.0.0, closes #610
author David Demelier <markand@malikania.fr>
date Tue, 10 Jan 2017 14:02:56 +0100
parents 4d89bd8a3f7f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
1
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 #include "yaml_private.h"
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
3
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 * API functions.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
7
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 YAML_DECLARE(int)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 yaml_emitter_open(yaml_emitter_t *emitter);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
10
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 YAML_DECLARE(int)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 yaml_emitter_close(yaml_emitter_t *emitter);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
13
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 YAML_DECLARE(int)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 yaml_emitter_dump(yaml_emitter_t *emitter, yaml_document_t *document);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
16
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
18 * Clean up functions.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
20
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 static void
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 yaml_emitter_delete_document_and_anchors(yaml_emitter_t *emitter);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 * Anchor functions.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
27
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 static void
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 yaml_emitter_anchor_node(yaml_emitter_t *emitter, int index);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 static yaml_char_t *
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 yaml_emitter_generate_anchor(yaml_emitter_t *emitter, int anchor_id);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
33
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 * Serialize functions.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 static int
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 yaml_emitter_dump_node(yaml_emitter_t *emitter, int index);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 static int
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 yaml_emitter_dump_alias(yaml_emitter_t *emitter, yaml_char_t *anchor);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
44
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 static int
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 yaml_emitter_dump_scalar(yaml_emitter_t *emitter, yaml_node_t *node,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 yaml_char_t *anchor);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 static int
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 yaml_emitter_dump_sequence(yaml_emitter_t *emitter, yaml_node_t *node,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 yaml_char_t *anchor);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
52
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 static int
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 yaml_emitter_dump_mapping(yaml_emitter_t *emitter, yaml_node_t *node,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 yaml_char_t *anchor);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 * Issue a STREAM-START event.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
60
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 YAML_DECLARE(int)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 yaml_emitter_open(yaml_emitter_t *emitter)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 yaml_event_t event;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 yaml_mark_t mark = { 0, 0, 0 };
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
66
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 assert(emitter); /* Non-NULL emitter object is required. */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 assert(!emitter->opened); /* Emitter should not be opened yet. */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
69
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 STREAM_START_EVENT_INIT(event, YAML_ANY_ENCODING, mark, mark);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
71
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 if (!yaml_emitter_emit(emitter, &event)) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 return 0;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
75
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 emitter->opened = 1;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
77
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 return 1;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
80
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 * Issue a STREAM-END event.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
84
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 YAML_DECLARE(int)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 yaml_emitter_close(yaml_emitter_t *emitter)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 yaml_event_t event;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 yaml_mark_t mark = { 0, 0, 0 };
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
90
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 assert(emitter); /* Non-NULL emitter object is required. */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 assert(emitter->opened); /* Emitter should be opened. */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
93
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 if (emitter->closed) return 1;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
95
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 STREAM_END_EVENT_INIT(event, mark, mark);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
97
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 if (!yaml_emitter_emit(emitter, &event)) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 return 0;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 emitter->closed = 1;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
103
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 return 1;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
106
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 * Dump a YAML document.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
110
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 YAML_DECLARE(int)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 yaml_emitter_dump(yaml_emitter_t *emitter, yaml_document_t *document)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 yaml_event_t event;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 yaml_mark_t mark = { 0, 0, 0 };
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
116
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 assert(emitter); /* Non-NULL emitter object is required. */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 assert(document); /* Non-NULL emitter object is expected. */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
119
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 emitter->document = document;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
121
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 if (!emitter->opened) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 if (!yaml_emitter_open(emitter)) goto error;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
125
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 if (STACK_EMPTY(emitter, document->nodes)) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 if (!yaml_emitter_close(emitter)) goto error;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 yaml_emitter_delete_document_and_anchors(emitter);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 return 1;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
131
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 assert(emitter->opened); /* Emitter should be opened. */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
133
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 emitter->anchors = yaml_malloc(sizeof(*(emitter->anchors))
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 * (document->nodes.top - document->nodes.start));
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 if (!emitter->anchors) goto error;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 memset(emitter->anchors, 0, sizeof(*(emitter->anchors))
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 * (document->nodes.top - document->nodes.start));
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
139
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 DOCUMENT_START_EVENT_INIT(event, document->version_directive,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 document->tag_directives.start, document->tag_directives.end,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 document->start_implicit, mark, mark);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 if (!yaml_emitter_emit(emitter, &event)) goto error;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
144
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 yaml_emitter_anchor_node(emitter, 1);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 if (!yaml_emitter_dump_node(emitter, 1)) goto error;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
147
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 DOCUMENT_END_EVENT_INIT(event, document->end_implicit, mark, mark);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 if (!yaml_emitter_emit(emitter, &event)) goto error;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
150
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 yaml_emitter_delete_document_and_anchors(emitter);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
152
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 return 1;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
154
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 error:
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
156
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 yaml_emitter_delete_document_and_anchors(emitter);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
158
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 return 0;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
161
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 * Clean up the emitter object after a document is dumped.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
165
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 static void
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 yaml_emitter_delete_document_and_anchors(yaml_emitter_t *emitter)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 int index;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
170
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 if (!emitter->anchors) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 yaml_document_delete(emitter->document);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 emitter->document = NULL;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 return;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
176
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 for (index = 0; emitter->document->nodes.start + index
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 < emitter->document->nodes.top; index ++) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 yaml_node_t node = emitter->document->nodes.start[index];
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 if (!emitter->anchors[index].serialized) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 yaml_free(node.tag);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 if (node.type == YAML_SCALAR_NODE) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 yaml_free(node.data.scalar.value);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 if (node.type == YAML_SEQUENCE_NODE) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 STACK_DEL(emitter, node.data.sequence.items);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 if (node.type == YAML_MAPPING_NODE) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 STACK_DEL(emitter, node.data.mapping.pairs);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
193
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 STACK_DEL(emitter, emitter->document->nodes);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 yaml_free(emitter->anchors);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
196
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 emitter->anchors = NULL;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 emitter->last_anchor_id = 0;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 emitter->document = NULL;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
201
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 * Check the references of a node and assign the anchor id if needed.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
205
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 static void
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 yaml_emitter_anchor_node(yaml_emitter_t *emitter, int index)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 yaml_node_t *node = emitter->document->nodes.start + index - 1;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 yaml_node_item_t *item;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 yaml_node_pair_t *pair;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
212
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 emitter->anchors[index-1].references ++;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
214
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 if (emitter->anchors[index-1].references == 1) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 switch (node->type) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 case YAML_SEQUENCE_NODE:
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 for (item = node->data.sequence.items.start;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 item < node->data.sequence.items.top; item ++) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 yaml_emitter_anchor_node(emitter, *item);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 break;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 case YAML_MAPPING_NODE:
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 for (pair = node->data.mapping.pairs.start;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
225 pair < node->data.mapping.pairs.top; pair ++) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 yaml_emitter_anchor_node(emitter, pair->key);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 yaml_emitter_anchor_node(emitter, pair->value);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 break;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 default:
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 break;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
234
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 else if (emitter->anchors[index-1].references == 2) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
236 emitter->anchors[index-1].anchor = (++ emitter->last_anchor_id);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
238 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
239
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 * Generate a textual representation for an anchor.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
243
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
244 #define ANCHOR_TEMPLATE "id%03d"
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 #define ANCHOR_TEMPLATE_LENGTH 16
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
246
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 static yaml_char_t *
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 yaml_emitter_generate_anchor(yaml_emitter_t *emitter, int anchor_id)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 yaml_char_t *anchor = yaml_malloc(ANCHOR_TEMPLATE_LENGTH);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
251
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 if (!anchor) return NULL;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
253
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 sprintf((char *)anchor, ANCHOR_TEMPLATE, anchor_id);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
255
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 return anchor;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
258
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
260 * Serialize a node.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
261 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
262
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
263 static int
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 yaml_emitter_dump_node(yaml_emitter_t *emitter, int index)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
265 {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 yaml_node_t *node = emitter->document->nodes.start + index - 1;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 int anchor_id = emitter->anchors[index-1].anchor;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 yaml_char_t *anchor = NULL;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
269
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 if (anchor_id) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
271 anchor = yaml_emitter_generate_anchor(emitter, anchor_id);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
272 if (!anchor) return 0;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
273 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
274
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
275 if (emitter->anchors[index-1].serialized) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
276 return yaml_emitter_dump_alias(emitter, anchor);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
277 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
278
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
279 emitter->anchors[index-1].serialized = 1;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
280
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 switch (node->type) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
282 case YAML_SCALAR_NODE:
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
283 return yaml_emitter_dump_scalar(emitter, node, anchor);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
284 case YAML_SEQUENCE_NODE:
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 return yaml_emitter_dump_sequence(emitter, node, anchor);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
286 case YAML_MAPPING_NODE:
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
287 return yaml_emitter_dump_mapping(emitter, node, anchor);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
288 default:
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 assert(0); /* Could not happen. */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
290 break;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
291 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
292
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
293 return 0; /* Could not happen. */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
294 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
295
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
296 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
297 * Serialize an alias.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
298 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
299
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
300 static int
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
301 yaml_emitter_dump_alias(yaml_emitter_t *emitter, yaml_char_t *anchor)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
302 {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
303 yaml_event_t event;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 yaml_mark_t mark = { 0, 0, 0 };
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
305
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
306 ALIAS_EVENT_INIT(event, anchor, mark, mark);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
307
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
308 return yaml_emitter_emit(emitter, &event);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
309 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
310
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
311 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 * Serialize a scalar.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
313 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
314
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
315 static int
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
316 yaml_emitter_dump_scalar(yaml_emitter_t *emitter, yaml_node_t *node,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
317 yaml_char_t *anchor)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
318 {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
319 yaml_event_t event;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
320 yaml_mark_t mark = { 0, 0, 0 };
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
321
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
322 int plain_implicit = (strcmp((char *)node->tag,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
323 YAML_DEFAULT_SCALAR_TAG) == 0);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
324 int quoted_implicit = (strcmp((char *)node->tag,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
325 YAML_DEFAULT_SCALAR_TAG) == 0);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
326
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
327 SCALAR_EVENT_INIT(event, anchor, node->tag, node->data.scalar.value,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
328 node->data.scalar.length, plain_implicit, quoted_implicit,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
329 node->data.scalar.style, mark, mark);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
330
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
331 return yaml_emitter_emit(emitter, &event);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
332 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
333
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
334 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
335 * Serialize a sequence.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
336 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
337
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
338 static int
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
339 yaml_emitter_dump_sequence(yaml_emitter_t *emitter, yaml_node_t *node,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
340 yaml_char_t *anchor)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
341 {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
342 yaml_event_t event;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
343 yaml_mark_t mark = { 0, 0, 0 };
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
344
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
345 int implicit = (strcmp((char *)node->tag, YAML_DEFAULT_SEQUENCE_TAG) == 0);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
346
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
347 yaml_node_item_t *item;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
348
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
349 SEQUENCE_START_EVENT_INIT(event, anchor, node->tag, implicit,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
350 node->data.sequence.style, mark, mark);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
351 if (!yaml_emitter_emit(emitter, &event)) return 0;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
352
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
353 for (item = node->data.sequence.items.start;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
354 item < node->data.sequence.items.top; item ++) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
355 if (!yaml_emitter_dump_node(emitter, *item)) return 0;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
356 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
357
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
358 SEQUENCE_END_EVENT_INIT(event, mark, mark);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
359 if (!yaml_emitter_emit(emitter, &event)) return 0;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
360
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
361 return 1;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
362 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
363
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
364 /*
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
365 * Serialize a mapping.
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
366 */
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
367
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
368 static int
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
369 yaml_emitter_dump_mapping(yaml_emitter_t *emitter, yaml_node_t *node,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
370 yaml_char_t *anchor)
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
371 {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
372 yaml_event_t event;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
373 yaml_mark_t mark = { 0, 0, 0 };
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
374
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
375 int implicit = (strcmp((char *)node->tag, YAML_DEFAULT_MAPPING_TAG) == 0);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
376
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
377 yaml_node_pair_t *pair;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
378
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
379 MAPPING_START_EVENT_INIT(event, anchor, node->tag, implicit,
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
380 node->data.mapping.style, mark, mark);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
381 if (!yaml_emitter_emit(emitter, &event)) return 0;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
382
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
383 for (pair = node->data.mapping.pairs.start;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
384 pair < node->data.mapping.pairs.top; pair ++) {
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
385 if (!yaml_emitter_dump_node(emitter, pair->key)) return 0;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
386 if (!yaml_emitter_dump_node(emitter, pair->value)) return 0;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
387 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
388
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
389 MAPPING_END_EVENT_INIT(event, mark, mark);
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
390 if (!yaml_emitter_emit(emitter, &event)) return 0;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
391
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
392 return 1;
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
393 }
4d89bd8a3f7f yaml: import 0.1.5
David Demelier <markand@malikania.fr>
parents:
diff changeset
394