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
.fi
.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
back to normal with \fBansicolor(-1,-1,-1)\fR or subsequent reminders
will continue to be colored.

View File

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

View File

@@ -12,6 +12,19 @@ MSG This is [ansicolor(255,255,255,0,1)]clamped white text[n]
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
set a ansicolor(1)
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, 0, 2)
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
../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
EXIT
@@ -5461,17 +5469,25 @@ This is black text on a green background
This is clamped black text
This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors is: 1
Use256Colors is: 0
@@ -5482,17 +5498,25 @@ This is black text on a green background
This is clamped black text
This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors 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 white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors is: 1
Use256Colors is: 0
@@ -5524,17 +5556,25 @@ This is black text on a green background
This is clamped black text
This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors is: 1
Use256Colors is: 0
@@ -5545,17 +5585,25 @@ This is black text on a green background
This is clamped black text
This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors 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 white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors is: 1
Use256Colors is: 0
@@ -5587,17 +5643,25 @@ This is black text on a green background
This is clamped black text
This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors is: 1
Use256Colors is: 0
@@ -5608,17 +5672,25 @@ This is black text on a green background
This is clamped black text
This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors 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 white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors is: 1
Use256Colors is: 0
@@ -5650,17 +5730,25 @@ This is black text on a green background
This is clamped black text
This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors is: 1
Use256Colors is: 0
@@ -5671,17 +5759,25 @@ This is black text on a green background
This is clamped black text
This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors 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 white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors is: 1
Use256Colors is: 0
@@ -5713,17 +5817,25 @@ This is black text on a green background
This is clamped black text
This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors is: 1
Use256Colors is: 0
@@ -5734,17 +5846,25 @@ This is black text on a green background
This is clamped black text
This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors 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 white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors is: 1
Use256Colors is: 0
@@ -5776,17 +5904,25 @@ This is black text on a green background
This is clamped black text
This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors is: 1
Use256Colors is: 0
@@ -5797,17 +5933,25 @@ This is black text on a green background
This is clamped black text
This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors 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 white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
UseVTColors is: 1
Use256Colors is: 0
@@ -5839,17 +5991,25 @@ This is black text on a green background
This is clamped black text
This is clamped white text
../tests/ansicolors.rem(16): ansicolor(): Not enough arguments
../tests/ansicolors.rem(17): ansicolor(): Number too low
../tests/ansicolors.rem(18): ansicolor(): Number too high
../tests/ansicolors.rem(19): ansicolor(): Type mismatch
../tests/ansicolors.rem(20): ansicolor(): Type mismatch
../tests/ansicolors.rem(21): ansicolor(): Number too low
../tests/ansicolors.rem(22): ansicolor(): Number too high
../tests/ansicolors.rem(23): ansicolor(): Number too high
../tests/ansicolors.rem(24): ansicolor(): Number too low
../tests/ansicolors.rem(25): ansicolor(): Number too high
../tests/ansicolors.rem(26): ansicolor(): Number too low
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.
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.
../tests/ansicolors.rem(29): ansicolor(): Not enough arguments
../tests/ansicolors.rem(30): 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
-(1): Trig = Monday, 3 January, 2000
No reminders.

View File

@@ -834,6 +834,10 @@ OMIT 2000-01-01 THROUGH 2020-12-31
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
EXIT