diff options
-rw-r--r-- | buf.c | 7 | ||||
-rw-r--r-- | hash.c | 8 | ||||
-rw-r--r-- | lib.c | 14 | ||||
-rw-r--r-- | stream.c | 20 | ||||
-rw-r--r-- | stream.h | 2 | ||||
-rw-r--r-- | struct.c | 6 | ||||
-rw-r--r-- | tests/009/json.expected | 8 | ||||
-rw-r--r-- | tests/011/macros-2.expected | 5 | ||||
-rw-r--r-- | tests/012/struct.tl | 6 | ||||
-rw-r--r-- | tests/017/glob-zarray.expected | 3 |
10 files changed, 62 insertions, 17 deletions
@@ -622,6 +622,7 @@ val buf_print(val buf, val stream_in) val save_mode = test_set_indent_mode(stream, num_fast(indent_off), num_fast(indent_data)); val save_indent; + int fb = 0; put_string(lit("#b'"), stream); @@ -630,12 +631,16 @@ val buf_print(val buf, val stream_in) while (len-- > 0) { format(stream, lit("~,02x"), num_fast(*data++), nao); if ((++count & 7) == 0 && len) - width_check(stream, chr(' ')); + if (width_check(stream, chr(' '))) + fb = 1; } set_indent(stream, save_indent); set_indent_mode(stream, save_mode); + if (fb) + force_break(stream); + return put_char(chr('\''), stream); } @@ -408,7 +408,7 @@ static cnum hash_hash_op(val obj, int *count) static void hash_print_op(val hash, val out, val pretty, struct strm_ctx *ctx) { struct hash *h = coerce(struct hash *, hash->co.handle); - int need_space = 0; + int need_space = 0, force_br = 0; val save_mode = test_set_indent_mode(out, num_fast(indent_off), num_fast(indent_data)); val save_indent; @@ -461,7 +461,8 @@ static void hash_print_op(val hash, val out, val pretty, struct strm_ctx *ctx) while ((cell = hash_next(iter))) { val key = car(cell); val value = cdr(cell); - width_check(out, chr(' ')); + if (width_check(out, chr(' '))) + force_br = 1; put_string(lit("("), out); obj_print_impl(key, out, pretty, ctx); @@ -476,6 +477,9 @@ static void hash_print_op(val hash, val out, val pretty, struct strm_ctx *ctx) } put_string(lit(")"), out); + if (force_br) + force_break(out); + set_indent_mode(out, save_mode); set_indent(out, save_indent); } @@ -11109,6 +11109,7 @@ val obj_print_impl(val obj, val out, val pretty, struct strm_ctx *ctx) val iter; val closepar = chr(')'); val indent = zero; + int force_br = 0; if (sym == dwim_s && consp(cdr(obj))) { put_char(chr('['), out); @@ -11181,7 +11182,8 @@ finish: iter = nil; goto dot; } else if (consp(d)) { - width_check(out, chr(' ')); + if (width_check(out, chr(' '))) + force_br = 1; } else { dot: put_string(lit(" . "), out); @@ -11189,6 +11191,9 @@ dot: put_char(closepar, out); } } + + if (force_br) + force_break(out); } if (save_indent) @@ -11299,6 +11304,7 @@ dot: val save_mode = test_set_indent_mode(out, num_fast(indent_off), num_fast(indent_data)); val save_indent; + int force_br = 0; put_string(lit("#("), out); @@ -11308,11 +11314,15 @@ dot: val elem = obj->v.vec[i]; obj_print_impl(elem, out, pretty, ctx); if (i < length - 1) - width_check(out, chr(' ')); + if (width_check(out, chr(' '))) + force_br = 1; } put_char(chr(')'), out); + if (force_br) + force_break(out); + set_indent(out, save_indent); set_indent_mode(out, save_mode); } @@ -103,7 +103,7 @@ val shell, shell_arg; void strm_base_init(struct strm_base *s) { - static struct strm_base init = { indent_off, 60, 10, 0, 0, 0 }; + static struct strm_base init = { indent_off, 60, 10, 0, 0, 0, 0 }; *s = init; } @@ -3512,6 +3512,7 @@ val put_string(val string, val stream_in) switch (*p) { case '\n': col = 0; + s->force_break = 0; break; case '\t': col = (col + 1) | 7; @@ -3540,6 +3541,7 @@ val put_char(val ch, val stream_in) case L'\n': ops->put_char(stream, ch); s->column = 0; + s->force_break = 0; break; case L'\t': if (s->column == 0 && s->indent_mode != indent_off) { @@ -3697,14 +3699,25 @@ val width_check(val stream, val alt) if ((s->indent_mode == indent_code && s->column >= s->indent_chars + s->code_width) || (s->indent_mode == indent_data && - s->column >= s->indent_chars + s->data_width)) + s->column >= s->indent_chars + s->data_width) || + (s->indent_mode != indent_off && s->force_break)) { put_char(chr('\n'), stream); + s->force_break = 0; + return t; } else if (alt) { put_char(alt, stream); } - return t; + return nil; +} + +val force_break(val stream) +{ + struct strm_base *s = coerce(struct strm_base *, + cobj_handle(stream, stream_s)); + s->force_break = 1; + return stream; } struct strm_ctx *get_set_ctx(val stream, struct strm_ctx *ctx) @@ -4596,6 +4609,7 @@ void stream_init(void) reg_fun(intern(lit("set-indent"), user_package), func_n2(set_indent)); reg_fun(intern(lit("inc-indent"), user_package), func_n2(inc_indent)); reg_fun(intern(lit("width-check"), user_package), func_n2(width_check)); + reg_fun(intern(lit("force-break"), user_package), func_n1(force_break)); reg_varl(intern(lit("indent-off"), user_package), num_fast(indent_off)); reg_varl(intern(lit("indent-data"), user_package), num_fast(indent_data)); reg_varl(intern(lit("indent-code"), user_package), num_fast(indent_code)); @@ -49,6 +49,7 @@ struct strm_base { cnum code_width; cnum indent_chars; cnum column; + unsigned force_break; struct strm_ctx *ctx; }; @@ -209,6 +210,7 @@ val get_indent(val stream); val set_indent(val stream, val indent); val inc_indent(val stream, val delta); val width_check(val stream, val alt); +val force_break(val stream); struct strm_ctx *get_set_ctx(val stream, struct strm_ctx *); struct strm_ctx *get_ctx(val stream); val get_string(val stream, val nchars, val close_after_p); @@ -1410,6 +1410,7 @@ static void struct_inst_print(val obj, val out, val pretty, val save_mode = test_set_indent_mode(out, num_fast(indent_off), num_fast(indent_data)); val save_indent, iter, once; + int force_br = 0; int compat = opt_compat && opt_compat <= 154; if (!compat || pretty) { @@ -1433,7 +1434,8 @@ static void struct_inst_print(val obj, val out, val pretty, put_char(chr(' '), out); once = nil; } else { - width_check(out, chr(' ')); + if (width_check(out, chr(' '))) + force_br = 1; } obj_print_impl(sym, out, pretty, ctx); put_char(chr(' '), out); @@ -1441,6 +1443,8 @@ static void struct_inst_print(val obj, val out, val pretty, } } put_char(chr(')'), out); + if (force_br) + force_break(out); set_indent_mode(out, save_mode); set_indent(out, save_indent); } diff --git a/tests/009/json.expected b/tests/009/json.expected index 8bc4ab9a..8c3fc4c6 100644 --- a/tests/009/json.expected +++ b/tests/009/json.expected @@ -19,8 +19,9 @@ AST: #H(() ("web-app" #H(() ("servlet-mapping" #H(() ("cofaxTools" "/tools/*") ( ("dataStoreUrl" "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon") ("useDataStore" :true) ("cachePackageTagsTrack" 200.0) ("searchEngineFileTemplate" "forSearchEngines.htm") ("cachePackageTagsStore" 200.0) ("cachePagesRefresh" 10.0))) - ("servlet-name" "cofaxCDS")) #H(() ("servlet-class" "org.cofax.cds.EmailServlet") ("init-param" #H(() ("mailHost" "mail1") ("mailHostOverride" "mail2"))) - ("servlet-name" "cofaxEmail")) + ("servlet-name" "cofaxCDS")) + #H(() ("servlet-class" "org.cofax.cds.EmailServlet") ("init-param" #H(() ("mailHost" "mail1") ("mailHostOverride" "mail2"))) + ("servlet-name" "cofaxEmail")) #H(() ("servlet-class" "org.cofax.cds.AdminServlet") ("servlet-name" "cofaxAdmin")) #H(() ("servlet-class" "org.cofax.cds.FileServlet") ("servlet-name" "fileServlet")) #H(() ("servlet-class" "org.cofax.cms.CofaxToolsServlet") ("init-param" #H(() ("lookInContext" 1.0) ("removePageCache" "/content/admin/remove?cache=pages&id=") @@ -29,7 +30,8 @@ AST: #H(() ("web-app" #H(() ("servlet-mapping" #H(() ("cofaxTools" "/tools/*") ( ("log" 1.0) ("adminGroupID" 4.0) ("templatePath" "toolstemplates/") ("betaServer" :true) ("dataLogLocation" "/usr/local/tomcat/logs/dataLog.log") ("fileTransferFolder" "/usr/local/tomcat/webapps/content/fileTransferFolder"))) - ("servlet-name" "cofaxTools")))) ("taglib" #H(() ("taglib-uri" "cofax.tld") ("taglib-location" "/WEB-INF/tlds/cofax.tld")))))) + ("servlet-name" "cofaxTools")))) + ("taglib" #H(() ("taglib-uri" "cofax.tld") ("taglib-location" "/WEB-INF/tlds/cofax.tld")))))) Unmatched junk: "" diff --git a/tests/011/macros-2.expected b/tests/011/macros-2.expected index 7dad1247..0e4cb622 100644 --- a/tests/011/macros-2.expected +++ b/tests/011/macros-2.expected @@ -14,8 +14,9 @@ ((< i 100) ()) () (block #:cnt-blk-0001 (if (< (sys:setq i (succ i)) - 20) (return-from - #:cnt-blk-0001)) + 20) + (return-from + #:cnt-blk-0001)) (if (> i 30) (return-from #:brk-blk-0002)) diff --git a/tests/012/struct.tl b/tests/012/struct.tl index 7b0b7fd8..99b2a3eb 100644 --- a/tests/012/struct.tl +++ b/tests/012/struct.tl @@ -50,11 +50,13 @@ (set *gensym-counter* 0) (stest (ignwarn (sys:expand 's.(a).d)) "(slot (call (slot s 'a)\n \ - \ s) 'd)") + \ s)\n \ + \ 'd)") (set *gensym-counter* 0) (stest (ignwarn (sys:expand 's.(a b c).d)) "(slot (call (slot s 'a)\n \ - \ s b c)\n 'd)") + \ s b c)\n \ + \ 'd)") (test s.a 100) diff --git a/tests/017/glob-zarray.expected b/tests/017/glob-zarray.expected index 4bfc0810..cd54b421 100644 --- a/tests/017/glob-zarray.expected +++ b/tests/017/glob-zarray.expected @@ -1,3 +1,4 @@ 0 #S(glob-t pathc 4 pathv #("tests/001/query-1.txr" "tests/001/query-2.txr" "tests/001/query-3.txr" - "tests/001/query-4.txr") reserve 0) + "tests/001/query-4.txr") + reserve 0) |