Make "REM ... MSF ..." handle ANSI color escape sequences correctly.

This commit is contained in:
Dianne Skoll
2022-10-09 21:55:09 -04:00
parent f4ea3af6fc
commit c2e5534462
5 changed files with 416 additions and 215 deletions

View File

@@ -2727,10 +2727,6 @@ calendar mode:
REM SPECIAL COLOR 0 255 0 Green in normal and calendar mode REM SPECIAL COLOR 0 255 0 Green in normal and calendar mode
.fi .fi
.PP .PP
Also, the \fBMSF\fR-type reminder is likely to be confused by ANSI color
sequences and incorrectly format the text. So you should not use ANSI
color sequences with \fBMSF\fR-type reminders.
.PP
If you use the \fBansicolor\fR function, don't forget to reset the color If you use the \fBansicolor\fR function, don't forget to reset the color
back to normal with \fBansicolor(-1,-1,-1)\fR or subsequent reminders back to normal with \fBansicolor(-1,-1,-1)\fR or subsequent reminders
will continue to be colored. will continue to be colored.

View File

@@ -1215,6 +1215,25 @@ int CalcMinsFromUTC(int jul, int tim, int *mins, int *isdst)
return 0; return 0;
} }
static char const *OutputEscapeSequences(char const *s, int print)
{
while (*s == 0x1B && *(s+1) == '[') {
if (print) putchar(*s);
s++;
if (print) putchar(*s);
s++;
while (*s && (*s < 0x40 || *s > 0x7E)) {
if (print) putchar(*s);
s++;
}
if (*s) {
if (print) putchar(*s);
s++;
}
}
return s;
}
/***************************************************************/ /***************************************************************/
/* */ /* */
/* FillParagraph */ /* FillParagraph */
@@ -1276,9 +1295,17 @@ void FillParagraph(char const *s)
while(1) { while(1) {
while(ISBLANK(*s)) s++; while(ISBLANK(*s)) s++;
if (*s == '\n') break; if (*s == '\n') break;
s = OutputEscapeSequences(s, 1);
t = s; t = s;
while(*s && !isspace(*s)) s++; len = 0;
len = s - t; while(*s && !isspace(*s)) {
if (*s == 0x1B && *(s+1) == '[') {
s = OutputEscapeSequences(s, 0);
continue;
}
s++;
len++;
}
if (!len) { if (!len) {
return; return;
} }

View File

@@ -12,6 +12,19 @@ MSG This is [ansicolor(255,255,255,0,1)]clamped white text[n]
FLUSH FLUSH
# Test that MSF ignores ansi color sequences
set r ansicolor(255, 0, 0)
set g ansicolor(0, 255, 0)
set b ansicolor(0, 0, 255)
set n ansicolor("")
REM MSF Here we have a formatted reminder. It should be word-wrapped nicely and neatly by Remind. Although it is very long and unwieldy, the MSF keyword will wrap it so it's pleasantly readable.[n]
# Should have exactly the same word breaks
REM MSF [r]Here [g]we [b]have [r]a [g]formatted [b]reminder. [r]It [g]should[b] be [r]word-wrapped[g] nicely [b]and [r]neatly [g]by Remind. [b]Although [r]it [g]is [b]very [r]long [g]and [b]u[r]n[g]w[b]i[r]e[g]l[b]d[r]y[g], [r]the [g]MSF [b]keyword [r]will [g]wrap [b]it [r]so [g]it's [b]pleasantly [r]readable.[n]
FLUSH
# Some invalid combos # Some invalid combos
set a ansicolor(1) set a ansicolor(1)
set a ansicolor(-1, 0, 0) set a ansicolor(-1, 0, 0)
@@ -24,3 +37,4 @@ set a ansicolor(128, 128, 128, 2)
set a ansicolor(128, 128, 128, -1) set a ansicolor(128, 128, 128, -1)
set a ansicolor(128, 128, 128, 0, 2) set a ansicolor(128, 128, 128, 0, 2)
set a ansicolor(128, 128, 128, 0, -1) set a ansicolor(128, 128, 128, 0, -1)

View File

@@ -4110,6 +4110,14 @@ OMIT 2000-01-01 THROUGH 2020-12-31
OMIT Dec 5 2029 through Dec 4 2029 OMIT Dec 5 2029 through Dec 4 2029
../tests/test.rem(835): Error: THROUGH date earlier than start date ../tests/test.rem(835): Error: THROUGH date earlier than start date
# Test MSF
REM MSF This is a very long reminder. It should be wrapped. Will it be wrapped? I'm interested to see it it's wrapped. Please wrap this, ok?
../tests/test.rem(839): Trig = Saturday, 16 February, 1991
This is a very long reminder. It should be wrapped. Will it be
wrapped? I'm interested to see it it's wrapped. Please wrap this, ok?
# Don't want Remind to queue reminders # Don't want Remind to queue reminders
EXIT EXIT
@@ -5461,17 +5469,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: -1 TerminalBackground is: -1
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 0 Use256Colors is: 0
@@ -5482,17 +5498,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: -1 TerminalBackground is: -1
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 1 Use256Colors is: 1
@@ -5503,17 +5527,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: -1 TerminalBackground is: -1
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 0 Use256Colors is: 0
@@ -5524,17 +5556,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: 0 TerminalBackground is: 0
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 0 Use256Colors is: 0
@@ -5545,17 +5585,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: 0 TerminalBackground is: 0
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 1 Use256Colors is: 1
@@ -5566,17 +5614,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: 0 TerminalBackground is: 0
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 0 Use256Colors is: 0
@@ -5587,17 +5643,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: 1 TerminalBackground is: 1
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 0 Use256Colors is: 0
@@ -5608,17 +5672,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: 1 TerminalBackground is: 1
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 1 Use256Colors is: 1
@@ -5629,17 +5701,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: 1 TerminalBackground is: 1
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 0 Use256Colors is: 0
@@ -5650,17 +5730,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: -1 TerminalBackground is: -1
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 0 Use256Colors is: 0
@@ -5671,17 +5759,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: -1 TerminalBackground is: -1
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 1 Use256Colors is: 1
@@ -5692,17 +5788,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: -1 TerminalBackground is: -1
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 0 Use256Colors is: 0
@@ -5713,17 +5817,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: 0 TerminalBackground is: 0
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 0 Use256Colors is: 0
@@ -5734,17 +5846,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: 0 TerminalBackground is: 0
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 1 Use256Colors is: 1
@@ -5755,17 +5875,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: 0 TerminalBackground is: 0
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 0 Use256Colors is: 0
@@ -5776,17 +5904,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: 1 TerminalBackground is: 1
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 0 Use256Colors is: 0
@@ -5797,17 +5933,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: 1 TerminalBackground is: 1
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 1 Use256Colors is: 1
@@ -5818,17 +5962,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
TerminalBackground is: 1 TerminalBackground is: 1
UseVTColors is: 1 UseVTColors is: 1
Use256Colors is: 0 Use256Colors is: 0
@@ -5839,17 +5991,25 @@ This is black text on a green background
This is clamped black text This is clamped black text
This is clamped white text This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(17): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(18): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch Here we have a formatted reminder. It should be word-wrapped nicely
../tests/ansicolors.rem(21): ansicolor(): Number too low and neatly by Remind. Although it is very long and unwieldy, the MSF
../tests/ansicolors.rem(22): ansicolor(): Number too high keyword will wrap it so it's pleasantly readable.
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low ../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(25): ansicolor(): Number too high ../tests/ansicolors.rem(30): ansicolor(): Number too low
../tests/ansicolors.rem(26): ansicolor(): Number too low ../tests/ansicolors.rem(31): ansicolor(): Number too high
../tests/ansicolors.rem(32): ansicolor(): Type mismatch
../tests/ansicolors.rem(33): ansicolor(): Type mismatch
../tests/ansicolors.rem(34): ansicolor(): Number too low
../tests/ansicolors.rem(35): ansicolor(): Number too high
../tests/ansicolors.rem(36): ansicolor(): Number too high
../tests/ansicolors.rem(37): ansicolor(): Number too low
../tests/ansicolors.rem(38): ansicolor(): Number too high
../tests/ansicolors.rem(39): ansicolor(): Number too low
MON WKDAY DAY across year test MON WKDAY DAY across year test
-(1): Trig = Monday, 3 January, 2000 -(1): Trig = Monday, 3 January, 2000
No reminders. No reminders.

View File

@@ -834,6 +834,10 @@ OMIT 2000-01-01 THROUGH 2020-12-31
OMIT Dec 5 2029 through Dec 4 2029 OMIT Dec 5 2029 through Dec 4 2029
# Test MSF
REM MSF This is a very long reminder. It should be wrapped. Will it be wrapped? I'm interested to see it it's wrapped. Please wrap this, ok?
# Don't want Remind to queue reminders # Don't want Remind to queue reminders
EXIT EXIT