From f2743aca368e66dc17d6e4afa415b90fdb1e8e6f Mon Sep 17 00:00:00 2001 From: Calvin Rose Date: Thu, 6 Dec 2018 17:26:59 -0500 Subject: [PATCH] Improve pretty printing for table and struct entry values. --- README.md | 2 +- src/core/core.janet | 10 +++++----- src/core/string.c | 12 +++++++----- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index a179cf2f..8320b4f8 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Janet makes a good system scripting language, or a language to embed in other pr * Lexical scoping * Imperative programming as well as functional * REPL - * 300+ functions and macros in the core library +* 300+ functions and macros in the core library * Interactive environment with detailed stack traces ## Documentation diff --git a/src/core/core.janet b/src/core/core.janet index 9bd8604c..a502fc9e 100644 --- a/src/core/core.janet +++ b/src/core/core.janet @@ -742,7 +742,7 @@ (if (zero? (length more)) f (fn [& r] (f ;more ;r)))) -(defn every? +(defn every? "Returns true if each value in is truthy, otherwise the first falsey value." [ind] @@ -889,7 +889,7 @@ value, one key will be ignored." [xs] (flatten-into @[] xs)) -(defn kvs +(defn kvs "Takes a table or struct and returns and array of key value pairs like @[k v k v ...]. Returns a new array." [dict] @@ -1250,7 +1250,7 @@ value, one key will be ignored." (buffer/push-string buf str) (buffer/push-string buf "\n"))) (var returnval nil) - (run-context *env* chunks + (run-context *env* chunks (fn [sig x f source] (if (= sig :dead) (:= returnval x) @@ -1368,7 +1368,7 @@ value, one key will be ignored." (:= loading.path false) newenv))))) -(defn import* +(defn import* [env path & args] (def targs (table ;args)) (def {:as as @@ -1400,7 +1400,7 @@ value, one key will be ignored." (defn repl "Run a repl. The first parameter is an optional function to call to get a chunk of source code that should return nil for end of file. - The second parameter is a function that is called when a signal is + The second parameter is a function that is called when a signal is caught." [chunks onsignal &] (def newenv (make-env)) diff --git a/src/core/string.c b/src/core/string.c index d0a6d490..1332b764 100644 --- a/src/core/string.c +++ b/src/core/string.c @@ -490,7 +490,7 @@ static void print_newline(struct pretty *S, int just_a_space) { } /* Helper for pretty printing */ -static void janet_pretty_one(struct pretty *S, Janet x) { +static void janet_pretty_one(struct pretty *S, Janet x, int is_dict_value) { /* Add to seen */ switch (janet_type(x)) { case JANET_NIL: @@ -534,9 +534,10 @@ static void janet_pretty_one(struct pretty *S, Janet x) { janet_indexed_view(x, &arr, &len); if (!isarray && len >= 5) janet_buffer_push_u8(S->buffer, ' '); + if (is_dict_value && len >= 5) print_newline(S, 0); for (i = 0; i < len; i++) { if (i) print_newline(S, len < 5); - janet_pretty_one(S, arr[i]); + janet_pretty_one(S, arr[i], 0); } } S->indent -= 2; @@ -575,6 +576,7 @@ static void janet_pretty_one(struct pretty *S, Janet x) { janet_dictionary_view(x, &kvs, &len, &cap); if (!istable && len >= 4) janet_buffer_push_u8(S->buffer, ' '); + if (is_dict_value && len >= 5) print_newline(S, 0); for (i = 0; i < cap; i++) { if (!janet_checktype(kvs[i].key, JANET_NIL)) { if (first_kv_pair) { @@ -582,9 +584,9 @@ static void janet_pretty_one(struct pretty *S, Janet x) { } else { print_newline(S, len < 4); } - janet_pretty_one(S, kvs[i].key); + janet_pretty_one(S, kvs[i].key, 0); janet_buffer_push_u8(S->buffer, ' '); - janet_pretty_one(S, kvs[i].value); + janet_pretty_one(S, kvs[i].value, 1); } } } @@ -610,7 +612,7 @@ JanetBuffer *janet_pretty(JanetBuffer *buffer, int depth, Janet x) { S.depth = depth; S.indent = 0; janet_table_init(&S.seen, 10); - janet_pretty_one(&S, x); + janet_pretty_one(&S, x, 0); janet_table_deinit(&S.seen); return S.buffer; }