summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxi <xi@18f92427-320e-0410-9341-c67f048884a3>2008-07-31 20:24:39 +0000
committerxi <xi@18f92427-320e-0410-9341-c67f048884a3>2008-07-31 20:24:39 +0000
commitc3c0eb7c0571381b0a18a31fd2b18e8029f47ed0 (patch)
tree1bbcbbc57e73db292689d0cde4e5a0f4a791986e
parent6608dc4b2c6f0c7f0761ebdee74e4022c09bbf76 (diff)
downloadlibyaml-c3c0eb7c0571381b0a18a31fd2b18e8029f47ed0.tar.gz
Tagged the 0.1.1 release (better later than never).
git-svn-id: http://svn.pyyaml.org/libyaml/trunk@272 18f92427-320e-0410-9341-c67f048884a3
-rw-r--r--src/dumper.c65
-rw-r--r--src/yaml_private.h13
2 files changed, 46 insertions, 32 deletions
diff --git a/src/dumper.c b/src/dumper.c
index dc3ad66..d12dee4 100644
--- a/src/dumper.c
+++ b/src/dumper.c
@@ -1,8 +1,6 @@
#include "yaml_private.h"
-#if 0
-
/*
* API functions.
*/
@@ -66,8 +64,8 @@ yaml_emitter_open(yaml_emitter_t *emitter)
yaml_event_t event;
yaml_mark_t mark = { 0, 0, 0 };
- assert(emitter); /* Non-NULL emitter object is required. */
- assert(!emitter->opened); /* Emitter should not be opened yet. */
+ assert(emitter); /* Non-NULL emitter object is required. */
+ assert(!emitter->is_opened); /* Emitter should not be opened yet. */
STREAM_START_EVENT_INIT(event, YAML_ANY_ENCODING, mark, mark);
@@ -75,7 +73,7 @@ yaml_emitter_open(yaml_emitter_t *emitter)
return 0;
}
- emitter->opened = 1;
+ emitter->is_opened = 1;
return 1;
}
@@ -91,9 +89,9 @@ yaml_emitter_close(yaml_emitter_t *emitter)
yaml_mark_t mark = { 0, 0, 0 };
assert(emitter); /* Non-NULL emitter object is required. */
- assert(emitter->opened); /* Emitter should be opened. */
+ assert(emitter->is_opened); /* Emitter should be opened. */
- if (emitter->closed) return 1;
+ if (emitter->is_closed) return 1;
STREAM_END_EVENT_INIT(event, mark, mark);
@@ -101,7 +99,7 @@ yaml_emitter_close(yaml_emitter_t *emitter)
return 0;
}
- emitter->closed = 1;
+ emitter->is_closed = 1;
return 1;
}
@@ -121,34 +119,41 @@ yaml_emitter_dump(yaml_emitter_t *emitter, yaml_document_t *document)
emitter->document = document;
- if (!emitter->opened) {
+ if (!emitter->is_opened) {
if (!yaml_emitter_open(emitter)) goto error;
}
- if (STACK_EMPTY(emitter, document->nodes)) {
- if (!yaml_emitter_close(emitter)) goto error;
- yaml_emitter_delete_document_and_anchors(emitter);
- return 1;
- }
+ if (document->type == YAML_DOCUMENT)
+ {
+ assert(emitter->is_opened); /* Emitter should be opened. */
+
+ if (STACK_EMPTY(emitter, emitter->nodes)) {
+ SERIALIZER_ERROR_INIT(emitter, "root node is not specified");
+ goto error;
+ }
- assert(emitter->opened); /* Emitter should be opened. */
+ emitter->anchors = yaml_malloc(sizeof(*(emitter->anchors))
+ * (document->nodes.length));
+ if (!emitter->anchors) goto error;
+ memset(emitter->anchors, 0, sizeof(*(emitter->anchors))
+ * (document->nodes.length));
- emitter->anchors = yaml_malloc(sizeof(*(emitter->anchors))
- * (document->nodes.top - document->nodes.start));
- if (!emitter->anchors) goto error;
- memset(emitter->anchors, 0, sizeof(*(emitter->anchors))
- * (document->nodes.top - document->nodes.start));
+ DOCUMENT_START_EVENT_INIT(event, document->version_directive,
+ document->tag_directives.list, document->tag_directives.length,
+ document->tag_directives.capacity,
+ document->start_implicit, mark, mark);
+ if (!yaml_emitter_emit(emitter, &event)) goto error;
- DOCUMENT_START_EVENT_INIT(event, document->version_directive,
- document->tag_directives.start, document->tag_directives.end,
- document->start_implicit, mark, mark);
- if (!yaml_emitter_emit(emitter, &event)) goto error;
+ yaml_emitter_anchor_node(emitter, 0);
+ if (!yaml_emitter_dump_node(emitter, 0)) goto error;
- yaml_emitter_anchor_node(emitter, 1);
- if (!yaml_emitter_dump_node(emitter, 1)) goto error;
+ DOCUMENT_END_EVENT_INIT(event, document->end_implicit, mark, mark);
+ if (!yaml_emitter_emit(emitter, &event)) goto error;
+ }
- DOCUMENT_END_EVENT_INIT(event, document->end_implicit, mark, mark);
- if (!yaml_emitter_emit(emitter, &event)) goto error;
+ if (!document->type) {
+ if (!yaml_emitter_close(emitter)) goto error;
+ }
yaml_emitter_delete_document_and_anchors(emitter);
@@ -243,7 +248,7 @@ yaml_emitter_anchor_node(yaml_emitter_t *emitter, int index)
* Generate a textual representation for an anchor.
*/
-#define ANCHOR_TEMPLATE "id%03d"
+#define ANCHOR_TEMPLATE "_%03d"
#define ANCHOR_TEMPLATE_LENGTH 16
static yaml_char_t *
@@ -394,5 +399,3 @@ yaml_emitter_dump_mapping(yaml_emitter_t *emitter, yaml_node_t *node,
return 1;
}
-#endif
-
diff --git a/src/yaml_private.h b/src/yaml_private.h
index b1eea24..f72cbd4 100644
--- a/src/yaml_private.h
+++ b/src/yaml_private.h
@@ -1228,6 +1228,17 @@ typedef enum yaml_emitter_state_e {
} yaml_emitter_state_t;
/*
+ * The information of a node being emitted.
+ */
+
+struct typedef yaml_node_data_s {
+ /* The node id. */
+ int id;
+ /* The collection iterator. */
+ int index;
+} yaml_node_data_t;
+
+/*
* The structure that holds data used by the file and string readers.
*/
@@ -1240,7 +1251,7 @@ typedef struct yaml_standard_writer_data_t {
} yaml_standard_writer_data_t;
/*
- * The internals emitter structure.
+ * The internal emitter structure.
*/
struct yaml_emitter_s {