Merge branch 'master' into next
This commit is contained in:
commit
dd5be77d1d
|
@ -425,9 +425,20 @@ static int json_double(void *ctx, double val) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static json_content_t content_result;
|
static json_content_t content_result;
|
||||||
|
static int content_level;
|
||||||
|
|
||||||
|
static int json_determine_content_deeper(void *ctx) {
|
||||||
|
content_level++;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int json_determine_content_shallower(void *ctx) {
|
||||||
|
content_level--;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int json_determine_content_string(void *ctx, const unsigned char *val, size_t len) {
|
static int json_determine_content_string(void *ctx, const unsigned char *val, size_t len) {
|
||||||
if (strcasecmp(last_key, "type") != 0)
|
if (strcasecmp(last_key, "type") != 0 || content_level > 1)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
DLOG("string = %.*s, last_key = %s\n", (int)len, val, last_key);
|
DLOG("string = %.*s, last_key = %s\n", (int)len, val, last_key);
|
||||||
|
@ -463,11 +474,16 @@ json_content_t json_determine_content(const char *filename) {
|
||||||
// We default to JSON_CONTENT_CON because it is legal to not include
|
// We default to JSON_CONTENT_CON because it is legal to not include
|
||||||
// “"type": "con"” in the JSON files for better readability.
|
// “"type": "con"” in the JSON files for better readability.
|
||||||
content_result = JSON_CONTENT_CON;
|
content_result = JSON_CONTENT_CON;
|
||||||
|
content_level = 0;
|
||||||
yajl_gen g;
|
yajl_gen g;
|
||||||
yajl_handle hand;
|
yajl_handle hand;
|
||||||
static yajl_callbacks callbacks = {
|
static yajl_callbacks callbacks = {
|
||||||
.yajl_string = json_determine_content_string,
|
.yajl_string = json_determine_content_string,
|
||||||
.yajl_map_key = json_key,
|
.yajl_map_key = json_key,
|
||||||
|
.yajl_start_array = json_determine_content_deeper,
|
||||||
|
.yajl_start_map = json_determine_content_deeper,
|
||||||
|
.yajl_end_map = json_determine_content_shallower,
|
||||||
|
.yajl_end_array = json_determine_content_shallower,
|
||||||
};
|
};
|
||||||
g = yajl_gen_alloc(NULL);
|
g = yajl_gen_alloc(NULL);
|
||||||
hand = yajl_alloc(&callbacks, NULL, (void *)g);
|
hand = yajl_alloc(&callbacks, NULL, (void *)g);
|
||||||
|
|
|
@ -179,7 +179,56 @@ $fh->flush;
|
||||||
cmd "append_layout $filename";
|
cmd "append_layout $filename";
|
||||||
|
|
||||||
ok(workspace_exists('4'), 'workspace "4" exists now');
|
ok(workspace_exists('4'), 'workspace "4" exists now');
|
||||||
my $ws = get_ws("4");
|
$ws = get_ws("4");
|
||||||
is($ws->{num}, 4, 'workspace number is 4');
|
is($ws->{num}, 4, 'workspace number is 4');
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Append a workspace with a numeric name, with the “type” property at the end
|
||||||
|
# of the JSON blurb (which is valid and sometimes happens).
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
ok(!workspace_exists('5'), 'workspace "5" does not exist yet');
|
||||||
|
|
||||||
|
($fh, $filename) = tempfile(UNLINK => 1);
|
||||||
|
print $fh <<'EOT';
|
||||||
|
// vim:ts=4:sw=4:et
|
||||||
|
{
|
||||||
|
// workspace with 1 children
|
||||||
|
"border": "pixel",
|
||||||
|
"floating": "auto_off",
|
||||||
|
"layout": "splith",
|
||||||
|
"percent": null,
|
||||||
|
"name": "5",
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"border": "pixel",
|
||||||
|
"floating": "auto_off",
|
||||||
|
"geometry": {
|
||||||
|
"height": 268,
|
||||||
|
"width": 484,
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"name": "vals@w00t: ~",
|
||||||
|
"percent": 1,
|
||||||
|
"swallows": [
|
||||||
|
{
|
||||||
|
// "class": "^URxvt$",
|
||||||
|
// "instance": "^urxvt$",
|
||||||
|
// "title": "^vals\\@w00t\\:\\ \\~$"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "con"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "workspace"
|
||||||
|
}
|
||||||
|
EOT
|
||||||
|
$fh->flush;
|
||||||
|
cmd "append_layout $filename";
|
||||||
|
|
||||||
|
ok(workspace_exists('5'), 'workspace "5" exists now');
|
||||||
|
$ws = get_ws("5");
|
||||||
|
is($ws->{num}, 5, 'workspace number is 5');
|
||||||
|
|
||||||
done_testing;
|
done_testing;
|
||||||
|
|
Loading…
Reference in New Issue