Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Yet more fixes from libucl
Baptiste Daroussin committed 11 years ago
commit 4e75e99078b798ff7241845a73580683f6b25133
parent 9636e74
3 files changed +30 -17
modified external/libucl/include/ucl.h
@@ -843,7 +843,7 @@ struct ucl_emitter_context {
	/** A set of output operations */
	const struct ucl_emitter_operations *ops;
	/** Current amount of indent tabs */
-
	unsigned int ident;
+
	unsigned int indent;
	/** Top level object */
	const ucl_object_t *top;
	/** The rest of context */
modified external/libucl/src/ucl_emitter.c
@@ -130,6 +130,19 @@ ucl_emitter_print_key (bool print_key, struct ucl_emitter_context *ctx,
			func->ucl_emitter_append_character (' ', 1, func->ud);
		}
	}
+
	else if (ctx->id == UCL_EMIT_YAML) {
+
		if (obj->keylen > 0 && obj->flags & UCL_OBJECT_NEED_KEY_ESCAPE) {
+
			ucl_elt_string_write_json (obj->key, obj->keylen, ctx);
+
		}
+
		else if (obj->keylen > 0) {
+
			func->ucl_emitter_append_len (obj->key, obj->keylen, func->ud);
+
		}
+
		else {
+
			func->ucl_emitter_append_len ("null", 4, func->ud);
+
		}
+

+
		func->ucl_emitter_append_len (": ", 2, func->ud);
+
	}
	else {
		if (obj->keylen > 0) {
			ucl_elt_string_write_json (obj->key, obj->keylen, ctx);
@@ -182,7 +195,7 @@ ucl_emitter_common_end_object (struct ucl_emitter_context *ctx,
	const struct ucl_emitter_functions *func = ctx->func;

	if (UCL_EMIT_IDENT_TOP_OBJ(ctx, obj)) {
-
		ctx->ident --;
+
		ctx->indent --;
		if (compact) {
			func->ucl_emitter_append_character ('}', 1, func->ud);
		}
@@ -191,7 +204,7 @@ ucl_emitter_common_end_object (struct ucl_emitter_context *ctx,
				/* newline is already added for this format */
				func->ucl_emitter_append_character ('\n', 1, func->ud);
			}
-
			ucl_add_tabs (func, ctx->ident, compact);
+
			ucl_add_tabs (func, ctx->indent, compact);
			func->ucl_emitter_append_character ('}', 1, func->ud);
		}
	}
@@ -210,7 +223,7 @@ ucl_emitter_common_end_array (struct ucl_emitter_context *ctx,
{
	const struct ucl_emitter_functions *func = ctx->func;

-
	ctx->ident --;
+
	ctx->indent --;
	if (compact) {
		func->ucl_emitter_append_character (']', 1, func->ud);
	}
@@ -219,7 +232,7 @@ ucl_emitter_common_end_array (struct ucl_emitter_context *ctx,
			/* newline is already added for this format */
			func->ucl_emitter_append_character ('\n', 1, func->ud);
		}
-
		ucl_add_tabs (func, ctx->ident, compact);
+
		ucl_add_tabs (func, ctx->indent, compact);
		func->ucl_emitter_append_character (']', 1, func->ud);
	}

@@ -249,7 +262,7 @@ ucl_emitter_common_start_array (struct ucl_emitter_context *ctx,
		func->ucl_emitter_append_len ("[\n", 2, func->ud);
	}

-
	ctx->ident ++;
+
	ctx->indent ++;

	if (obj->type == UCL_ARRAY) {
		/* explicit array */
@@ -294,7 +307,7 @@ ucl_emitter_common_start_object (struct ucl_emitter_context *ctx,
		else {
			func->ucl_emitter_append_len ("{\n", 2, func->ud);
		}
-
		ctx->ident ++;
+
		ctx->indent ++;
	}

	while ((cur = ucl_hash_iterate (obj->value.ov, &it))) {
@@ -315,7 +328,7 @@ ucl_emitter_common_start_object (struct ucl_emitter_context *ctx,
						func->ucl_emitter_append_len (",\n", 2, func->ud);
					}
				}
-
				ucl_add_tabs (func, ctx->ident, compact);
+
				ucl_add_tabs (func, ctx->indent, compact);
				ucl_emitter_common_start_array (ctx, cur, true, compact);
				ucl_emitter_common_end_array (ctx, cur, compact);
			}
@@ -348,11 +361,15 @@ ucl_emitter_common_elt (struct ucl_emitter_context *ctx,
			func->ucl_emitter_append_character (',', 1, func->ud);
		}
		else {
-
			func->ucl_emitter_append_len (",\n", 2, func->ud);
+
			if (ctx->id == UCL_EMIT_YAML && ctx->indent == 0) {
+
				func->ucl_emitter_append_len ("\n", 1, func->ud);
+
			} else {
+
				func->ucl_emitter_append_len (",\n", 2, func->ud);
+
			}
		}
	}

-
	ucl_add_tabs (func, ctx->ident, compact);
+
	ucl_add_tabs (func, ctx->indent, compact);

	switch (obj->type) {
	case UCL_INT:
@@ -461,7 +478,7 @@ ucl_object_emit_full (const ucl_object_t *obj, enum ucl_emitter emit_type,
	if (ctx != NULL) {
		memcpy (&my_ctx, ctx, sizeof (my_ctx));
		my_ctx.func = emitter;
-
		my_ctx.ident = 0;
+
		my_ctx.indent = 0;
		my_ctx.top = obj;

		my_ctx.ops->ucl_emitter_write_elt (&my_ctx, obj, true, false);
modified external/libucl/src/ucl_emitter_utils.c
@@ -93,9 +93,7 @@ ucl_elt_string_write_json (const char *str, size_t size,
	size_t len = 0;
	const struct ucl_emitter_functions *func = ctx->func;

-
	if (ctx->id != UCL_EMIT_YAML) {
-
		func->ucl_emitter_append_character ('"', 1, func->ud);
-
	}
+
	func->ucl_emitter_append_character ('"', 1, func->ud);

	while (size) {
		if (ucl_test_character (*p, UCL_CHARACTER_JSON_UNSAFE)) {
@@ -137,9 +135,7 @@ ucl_elt_string_write_json (const char *str, size_t size,
	if (len > 0) {
		func->ucl_emitter_append_len (c, len, func->ud);
	}
-
	if (ctx->id != UCL_EMIT_YAML) {
-
		func->ucl_emitter_append_character ('"', 1, func->ud);
-
	}
+
	func->ucl_emitter_append_character ('"', 1, func->ud);
}

/*