--- /dev/null
+
+#include "yaml_private.h"
+
+/*
+ * API functions.
+ */
+
+YAML_DECLARE(int)
+yaml_emitter_emit(yaml_emitter_t *emitter, yaml_event_t *event);
+
+YAML_DECLARE(int)
+yaml_emitter_emit_stream_start(yaml_emitter_t *emitter,
+ yaml_encoding_t encoding);
+
+YAML_DECLARE(int)
+yaml_emitter_emit_stream_end(yaml_emitter_t *emitter);
+
+YAML_DECLARE(int)
+yaml_emitter_emit_document_start(yaml_emitter_t *emitter,
+ yaml_version_directive_t *version_directive,
+ yaml_tag_directive_t *tag_directives_start,
+ yaml_tag_directive_t *tag_directives_end,
+ int implicit);
+
+YAML_DECLARE(int)
+yaml_emitter_emit_document_end(yaml_emitter_t *emitter, int implicit);
+
+YAML_DECLARE(int)
+yaml_emitter_emit_alias(yaml_emitter_t *emitter, yaml_char_t *anchor);
+
+YAML_DECLARE(int)
+yaml_emitter_emit_scalar(yaml_emitter_t *emitter,
+ yaml_char_t *anchor, yaml_char_t *tag,
+ yaml_char_t *value, size_t length,
+ int plain_implicit, int quoted_implicit,
+ yaml_scalar_style_t style);
+
+YAML_DECLARE(int)
+yaml_emitter_emit_sequence_start(yaml_emitter_t *emitter,
+ yaml_char_t *anchor, yaml_char_t *tag, int implicit,
+ yaml_sequence_style_t style);
+
+YAML_DECLARE(int)
+yaml_emitter_emit_sequence_end(yaml_emitter_t *emitter);
+
+YAML_DECLARE(int)
+yaml_emitter_emit_mapping_start(yaml_emitter_t *emitter,
+ yaml_char_t *anchor, yaml_char_t *tag, int implicit,
+ yaml_mapping_style_t style);
+
+YAML_DECLARE(int)
+yaml_emitter_emit_mapping_end(yaml_emitter_t *emitter);
+
+/*
+ * Emit STREAM-START.
+ */
+
+YAML_DECLARE(int)
+yaml_emitter_emit_stream_start(yaml_emitter_t *emitter,
+ yaml_encoding_t encoding)
+{
+ yaml_event_t event;
+ yaml_mark_t mark = { 0, 0, 0 };
+
+ assert(emitter); /* Non-NULL emitter object is expected. */
+
+ STREAM_START_EVENT_INIT(event, encoding, mark, mark);
+
+ return yaml_emitter_emit(emitter, &event);
+}
+
+/*
+ * Emit STREAM-END.
+ */
+
+YAML_DECLARE(int)
+yaml_emitter_emit_stream_end(yaml_emitter_t *emitter)
+{
+ yaml_event_t event;
+ yaml_mark_t mark = { 0, 0, 0 };
+
+ assert(emitter); /* Non-NULL emitter object is expected. */
+
+ STREAM_END_EVENT_INIT(event, mark, mark);
+
+ return yaml_emitter_emit(emitter, &event);
+}
+
+/*
+ * Emit DOCUMENT-START.
+ */
+
+YAML_DECLARE(int)
+yaml_emitter_emit_document_start(yaml_emitter_t *emitter,
+ yaml_version_directive_t *version_directive,
+ yaml_tag_directive_t *tag_directives_start,
+ yaml_tag_directive_t *tag_directives_end,
+ int implicit)
+{
+ yaml_event_t event;
+ yaml_mark_t mark = { 0, 0, 0 };
+ yaml_version_directive_t *version_directive_copy = NULL;
+ struct {
+ yaml_tag_directive_t *start;
+ yaml_tag_directive_t *end;
+ yaml_tag_directive_t *top;
+ } tag_directives_copy = { NULL, NULL, NULL };
+ yaml_tag_directive_t value = { NULL, NULL };
+
+ assert(emitter); /* Non-NULL emitter object is expected. */
+ assert((tag_directives_start && tag_directives_end) ||
+ (tag_directives_start == tag_directives_end));
+ /* Valid tag directives are expected. */
+
+ if (version_directive) {
+ version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t));
+ if (!version_directive_copy) {
+ emitter->error = YAML_MEMORY_ERROR;
+ goto error;
+ }
+ version_directive_copy->major = version_directive->major;
+ version_directive_copy->minor = version_directive->minor;
+ }
+
+ if (tag_directives_start != tag_directives_end) {
+ yaml_tag_directive_t *tag_directive;
+ if (!STACK_INIT(emitter, tag_directives_copy, INITIAL_STACK_SIZE))
+ goto error;
+ for (tag_directive = tag_directives_start;
+ tag_directive != tag_directives_end; tag_directive ++) {
+ value.handle = yaml_strdup(tag_directive->handle);
+ value.prefix = yaml_strdup(tag_directive->prefix);
+ if (!value.handle || !value.prefix) {
+ emitter->error = YAML_MEMORY_ERROR;
+ goto error;
+ }
+ if (!PUSH(emitter, tag_directives_copy, value))
+ goto error;
+ value.handle = NULL;
+ value.prefix = NULL;
+ }
+ }
+
+ DOCUMENT_START_EVENT_INIT(event, version_directive_copy,
+ tag_directives_copy.start, tag_directives_copy.end,
+ implicit, mark, mark);
+
+ if (yaml_emitter_emit(emitter, &event)) {
+ return 1;
+ }
+
+error:
+ yaml_free(version_directive_copy);
+ while (!STACK_EMPTY(emitter, tag_directives_copy)) {
+ yaml_tag_directive_t value = POP(emitter, tag_directives_copy);
+ yaml_free(value.handle);
+ yaml_free(value.prefix);
+ }
+ STACK_DEL(emitter, tag_directives_copy);
+ yaml_free(value.handle);
+ yaml_free(value.prefix);
+
+ return 0;
+}
+
+/*
+ * Emit DOCUMENT-END.
+ */
+
+YAML_DECLARE(int)
+yaml_emitter_emit_document_end(yaml_emitter_t *emitter, int implicit)
+{
+ yaml_event_t event;
+ yaml_mark_t mark = { 0, 0, 0 };
+
+ assert(emitter); /* Non-NULL emitter object is expected. */
+
+ DOCUMENT_END_EVENT_INIT(event, implicit, mark, mark);
+
+ return yaml_emitter_emit(emitter, &event);
+}
+
+/*
+ * Emit ALIAS.
+ */
+
+YAML_DECLARE(int)
+yaml_emitter_emit_alias(yaml_emitter_t *emitter, yaml_char_t *anchor)
+{
+ yaml_event_t event;
+ yaml_mark_t mark = { 0, 0, 0 };
+ yaml_char_t *anchor_copy = NULL;
+
+ assert(emitter); /* Non-NULL emitter object is expected. */
+ assert(anchor); /* Non-NULL anchor is expected. */
+
+ anchor_copy = yaml_strdup(anchor);
+ if (!anchor_copy) {
+ emitter->error = YAML_MEMORY_ERROR;
+ return 0;
+ }
+
+ ALIAS_EVENT_INIT(event, anchor_copy, mark, mark);
+
+ if (yaml_emitter_emit(emitter, &event)) {
+ return 1;
+ }
+
+ yaml_free(anchor_copy);
+
+ return 0;
+}
+
+/*
+ * Emit SCALAR.
+ */
+
+YAML_DECLARE(int)
+yaml_emitter_emit_scalar(yaml_emitter_t *emitter,
+ yaml_char_t *anchor, yaml_char_t *tag,
+ yaml_char_t *value, size_t length,
+ int plain_implicit, int quoted_implicit,
+ yaml_scalar_style_t style)
+{
+ yaml_event_t event;
+ yaml_mark_t mark = { 0, 0, 0 };
+ yaml_char_t *anchor_copy = NULL;
+ yaml_char_t *tag_copy = NULL;
+ yaml_char_t *value_copy = NULL;
+
+ assert(emitter); /* Non-NULL emitter object is expected. */
+ assert(value); /* Non-NULL anchor is expected. */
+
+ if (anchor) {
+ anchor_copy = yaml_strdup(anchor);
+ if (!anchor_copy) {
+ emitter->error = YAML_MEMORY_ERROR;
+ goto error;
+ }
+ }
+
+ if (tag) {
+ tag_copy = yaml_strdup(tag);
+ if (!tag_copy) {
+ emitter->error = YAML_MEMORY_ERROR;
+ goto error;
+ }
+ }
+
+ value_copy = yaml_malloc(length+1);
+ if (!value_copy) {
+ emitter->error = YAML_MEMORY_ERROR;
+ goto error;
+ }
+ memcpy(value_copy, value, length);
+ value_copy[length] = '\0';
+
+ SCALAR_EVENT_INIT(event, anchor_copy, tag_copy, value_copy, length,
+ plain_implicit, quoted_implicit, style, mark, mark);
+
+ if (yaml_emitter_emit(emitter, &event)) {
+ return 1;
+ }
+
+error:
+ yaml_free(anchor_copy);
+ yaml_free(tag_copy);
+ yaml_free(value_copy);
+
+ return 0;
+}
+
+/*
+ * Emit SEQUENCE-START.
+ */
+
+YAML_DECLARE(int)
+yaml_emitter_emit_sequence_start(yaml_emitter_t *emitter,
+ yaml_char_t *anchor, yaml_char_t *tag, int implicit,
+ yaml_sequence_style_t style)
+{
+ yaml_event_t event;
+ yaml_mark_t mark = { 0, 0, 0 };
+ yaml_char_t *anchor_copy = NULL;
+ yaml_char_t *tag_copy = NULL;
+
+ assert(emitter); /* Non-NULL emitter object is expected. */
+
+ if (anchor) {
+ anchor_copy = yaml_strdup(anchor);
+ if (!anchor_copy) {
+ emitter->error = YAML_MEMORY_ERROR;
+ goto error;
+ }
+ }
+
+ if (tag) {
+ tag_copy = yaml_strdup(tag);
+ if (!tag_copy) {
+ emitter->error = YAML_MEMORY_ERROR;
+ goto error;
+ }
+ }
+
+ SEQUENCE_START_EVENT_INIT(event, anchor_copy, tag_copy,
+ implicit, style, mark, mark);
+
+ if (yaml_emitter_emit(emitter, &event)) {
+ return 1;
+ }
+
+error:
+ yaml_free(anchor_copy);
+ yaml_free(tag_copy);
+
+ return 0;
+}
+
+/*
+ * Emit SEQUENCE-END.
+ */
+
+YAML_DECLARE(int)
+yaml_emitter_emit_sequence_end(yaml_emitter_t *emitter)
+{
+ yaml_event_t event;
+ yaml_mark_t mark = { 0, 0, 0 };
+
+ assert(emitter); /* Non-NULL emitter object is expected. */
+
+ SEQUENCE_END_EVENT_INIT(event, mark, mark);
+
+ return yaml_emitter_emit(emitter, &event);
+}
+
+/*
+ * Emit MAPPING-START.
+ */
+
+YAML_DECLARE(int)
+yaml_emitter_emit_mapping_start(yaml_emitter_t *emitter,
+ yaml_char_t *anchor, yaml_char_t *tag, int implicit,
+ yaml_mapping_style_t style)
+{
+ yaml_event_t event;
+ yaml_mark_t mark = { 0, 0, 0 };
+ yaml_char_t *anchor_copy = NULL;
+ yaml_char_t *tag_copy = NULL;
+
+ assert(emitter); /* Non-NULL emitter object is expected. */
+
+ if (anchor) {
+ anchor_copy = yaml_strdup(anchor);
+ if (!anchor_copy) {
+ emitter->error = YAML_MEMORY_ERROR;
+ goto error;
+ }
+ }
+
+ if (tag) {
+ tag_copy = yaml_strdup(tag);
+ if (!tag_copy) {
+ emitter->error = YAML_MEMORY_ERROR;
+ goto error;
+ }
+ }
+
+ MAPPING_START_EVENT_INIT(event, anchor_copy, tag_copy,
+ implicit, style, mark, mark);
+
+ if (yaml_emitter_emit(emitter, &event)) {
+ return 1;
+ }
+
+error:
+ yaml_free(anchor_copy);
+ yaml_free(tag_copy);
+
+ return 0;
+}
+
+/*
+ * Emit MAPPING-END.
+ */
+
+YAML_DECLARE(int)
+yaml_emitter_emit_mapping_end(yaml_emitter_t *emitter)
+{
+ yaml_event_t event;
+ yaml_mark_t mark = { 0, 0, 0 };
+
+ assert(emitter); /* Non-NULL emitter object is expected. */
+
+ MAPPING_END_EVENT_INIT(event, mark, mark);
+
+ return yaml_emitter_emit(emitter, &event);
+}
+
+/*
+ * Emit an event.
+ */
+
+YAML_DECLARE(int)
+yaml_emitter_emit(yaml_emitter_t *emitter, yaml_event_t *event)
+{
+ return 0;
+}
+