summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2022-10-11 20:41:28 -0700
committerKaz Kylheku <kaz@kylheku.com>2022-10-11 20:41:28 -0700
commit5df51b54116d4287df161c42ca0edb16fb1f79a5 (patch)
tree6f6046d624fafa24843ddefd46522871e7104bed
parent423366b14fec676bcd13f04659f91ad7b6512724 (diff)
downloadtxr-5df51b54116d4287df161c42ca0edb16fb1f79a5.tar.gz
txr-5df51b54116d4287df161c42ca0edb16fb1f79a5.tar.bz2
txr-5df51b54116d4287df161c42ca0edb16fb1f79a5.zip
streams: new function inc-indent-abs.
* stream.c (inc_indent_abs): New function. (stream_init): inc-init-abs intrinsic registered. * stream.h (inc_indent_abs): Declared. * txr.1: Documented. * stdlib/doc-syms.tl: Updated.
-rw-r--r--stdlib/doc-syms.tl7
-rw-r--r--stream.c13
-rw-r--r--stream.h1
-rw-r--r--txr.113
4 files changed, 30 insertions, 4 deletions
diff --git a/stdlib/doc-syms.tl b/stdlib/doc-syms.tl
index 59535d41..e214011c 100644
--- a/stdlib/doc-syms.tl
+++ b/stdlib/doc-syms.tl
@@ -864,7 +864,7 @@
("get-fd" "N-011D42AB")
("get-frames" "N-010405DA")
("get-hash-userdata" "N-030B41A7")
- ("get-indent" "N-024E9FD8")
+ ("get-indent" "N-00F72290")
("get-indent-mode" "N-03F3170C")
("get-json" "N-014295FE")
("get-jsons" "N-0124D378")
@@ -998,7 +998,8 @@
("inaddr-loopback" "N-026A2C3B")
("inaddr-str" "N-02456270")
("inc" "N-03A0AABD")
- ("inc-indent" "N-024E9FD8")
+ ("inc-indent" "N-00F72290")
+ ("inc-indent-abs" "N-00F72290")
("include" "N-01A2ECA0")
("indent-code" "N-00512FDD")
("indent-data" "N-00512FDD")
@@ -1703,7 +1704,7 @@
("set-cflags" "N-02061924")
("set-hash-userdata" "N-030B40A7")
("set-iflags" "N-02061924")
- ("set-indent" "N-024E9FD8")
+ ("set-indent" "N-00F72290")
("set-indent-mode" "N-03F3170C")
("set-key" "N-033F7D05")
("set-left" "N-033F7D05")
diff --git a/stream.c b/stream.c
index 08c2adc9..a3a70545 100644
--- a/stream.c
+++ b/stream.c
@@ -4104,6 +4104,18 @@ val inc_indent(val stream, val delta)
return oldval;
}
+val inc_indent_abs(val stream, val delta)
+{
+ val self = lit("inc-indent-abs");
+ struct strm_base *s = coerce(struct strm_base *,
+ cobj_handle(self, stream, stream_cls));
+ val oldval = num(s->indent_chars);
+ s->indent_chars = c_num(plus(delta, oldval), self);
+ if (s->indent_chars < 0)
+ s->indent_chars = 0;
+ return oldval;
+}
+
val width_check(val stream, val alt)
{
val self = lit("width-check");
@@ -5553,6 +5565,7 @@ void stream_init(void)
reg_fun(intern(lit("get-indent"), user_package), func_n1(get_indent));
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("inc-indent-abs"), user_package), func_n2(inc_indent_abs));
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_fun(intern(lit("set-max-length"), user_package), func_n2(set_max_length));
diff --git a/stream.h b/stream.h
index 4d73bac1..428fa47c 100644
--- a/stream.h
+++ b/stream.h
@@ -236,6 +236,7 @@ val set_indent_mode(val stream, val mode);
val get_indent(val stream);
val set_indent(val stream, val indent);
val inc_indent(val stream, val delta);
+val inc_indent_abs(val stream, val delta);
val width_check(val stream, val alt);
val force_break(val stream);
val set_max_length(val stream, val length);
diff --git a/txr.1 b/txr.1
index 162545c4..be539219 100644
--- a/txr.1
+++ b/txr.1
@@ -62570,11 +62570,12 @@ if and only if the current mode is
equal to
.metn compare-mode .
-.coNP Functions @, get-indent @ set-indent and @ inc-indent
+.coNP Functions @, get-indent @, set-indent @ inc-indent and @ inc-indent-abs
.synb
.mets (get-indent << stream )
.mets (set-indent < stream << new-indent )
.mets (inc-indent < stream << indent-delta )
+.mets (inc-indent-abs < stream << indent-delta )
.syne
.desc
These functions manipulate the indentation value of the stream.
@@ -62605,6 +62606,16 @@ The indentation is calculated by adding
to the current column position.
If a negative indentation results, it is clamped to zero.
+The
+.code inc-indent-abs
+function sets
+.metn stream 's
+indentation relative to the current indentation value.
+The indentation is calculated by adding
+.meta indent-delta
+to the current indentation amount.
+If a negative indentation results, it is clamped to zero.
+
.coNP Function @ width-check
.synb
.mets (width-check < stream << alt-char )