mirror of
https://salsa.debian.org/dskoll/remind.git
synced 2026-04-16 14:28:40 +02:00
Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
de03d0c02a | ||
|
|
3e6e3b6a34 | ||
|
|
bf48e31335 | ||
|
|
77c0beffb3 | ||
|
|
9a724d7618 | ||
|
|
1c20f54edb | ||
|
|
52b36d4503 | ||
|
|
0a82eadea6 | ||
|
|
0cd4fe67d1 | ||
|
|
9c31004b62 | ||
|
|
3431833be2 | ||
|
|
a98a4b9f72 | ||
|
|
4aaba4da88 | ||
|
|
98e37d8c54 | ||
|
|
4335aac7b2 | ||
|
|
695a2a3c2d | ||
|
|
47aa542d4f | ||
|
|
5b4d1ae264 | ||
|
|
721ccb9af9 | ||
|
|
ab1a6c412a | ||
|
|
c3a555942b | ||
|
|
0d15977875 | ||
|
|
0a7e6ee219 | ||
|
|
baf049662f | ||
|
|
fd5d9a479d | ||
|
|
01d3081f19 | ||
|
|
7841077fc6 | ||
|
|
2003c7a703 | ||
|
|
4a603ce60d | ||
|
|
caad7f5aa3 | ||
|
|
ea2312c0b2 |
19
README.md
19
README.md
@@ -95,16 +95,9 @@ though I suspect it's entirely or almost entirely human-written.
|
||||
2. No AI-generated patches or other sorts of contributions to Remind
|
||||
will be accepted.
|
||||
|
||||
3. Remind's source code may not be used to train an AI model,
|
||||
including an LLM model, unless all of the output of said model is
|
||||
released under the GNU General Public License, version 2. If you use
|
||||
any of Remind's source code to train your model, then anything that
|
||||
the model produces is a derived product of Remind and must be licensed
|
||||
under the same terms as Remind.
|
||||
|
||||
---
|
||||
|
||||
Contact info: dianne@skoll.ca
|
||||
|
||||
Home page: [https://dianne.skoll.ca/projects/remind/](https://dianne.skoll.ca/projects/remind/)
|
||||
|
||||
3. It is not yet settled whether, if you train an AI model on this
|
||||
source code, the resulting model, and/or any outputs it produces, are
|
||||
derivative works of the code. But if they are, and do not fall under
|
||||
"fair use" or equivalent in your jurisdiction, then as with any other
|
||||
derivative work you may only distribute them under the terms of the
|
||||
GNU General Public License, version 2.
|
||||
18
configure
vendored
18
configure
vendored
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.72 for remind 06.02.03.
|
||||
# Generated by GNU Autoconf 2.72 for remind 06.02.05.
|
||||
#
|
||||
#
|
||||
# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation,
|
||||
@@ -601,8 +601,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='remind'
|
||||
PACKAGE_TARNAME='remind'
|
||||
PACKAGE_VERSION='06.02.03'
|
||||
PACKAGE_STRING='remind 06.02.03'
|
||||
PACKAGE_VERSION='06.02.05'
|
||||
PACKAGE_STRING='remind 06.02.05'
|
||||
PACKAGE_BUGREPORT=''
|
||||
PACKAGE_URL='https://dianne.skoll.ca/projects/remind/'
|
||||
|
||||
@@ -1258,7 +1258,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
'configure' configures remind 06.02.03 to adapt to many kinds of systems.
|
||||
'configure' configures remind 06.02.05 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -1320,7 +1320,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of remind 06.02.03:";;
|
||||
short | recursive ) echo "Configuration of remind 06.02.05:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1408,7 +1408,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
remind configure 06.02.03
|
||||
remind configure 06.02.05
|
||||
generated by GNU Autoconf 2.72
|
||||
|
||||
Copyright (C) 2023 Free Software Foundation, Inc.
|
||||
@@ -1871,7 +1871,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by remind $as_me 06.02.03, which was
|
||||
It was created by remind $as_me 06.02.05, which was
|
||||
generated by GNU Autoconf 2.72. Invocation command line was
|
||||
|
||||
$ $0$ac_configure_args_raw
|
||||
@@ -4892,7 +4892,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by remind $as_me 06.02.03, which was
|
||||
This file was extended by remind $as_me 06.02.05, which was
|
||||
generated by GNU Autoconf 2.72. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -4957,7 +4957,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config='$ac_cs_config_escaped'
|
||||
ac_cs_version="\\
|
||||
remind config.status 06.02.03
|
||||
remind config.status 06.02.05
|
||||
configured by $0, generated by GNU Autoconf 2.72,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_INIT(remind, 06.02.03, , , https://dianne.skoll.ca/projects/remind/)
|
||||
AC_INIT(remind, 06.02.05, , , https://dianne.skoll.ca/projects/remind/)
|
||||
AC_CONFIG_SRCDIR([src/queue.c])
|
||||
|
||||
cat <<'EOF'
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
"$May" "$MinsFromUTC" "$Minute" "$Monday" "$Mplu" "$NextMode"
|
||||
"$November" "$Now" "$NumFullOmits" "$NumPartialOmits" "$NumQueued"
|
||||
"$NumTrig" "$October" "$On" "$OnceFile" "$ParseUntriggered" "$Pm"
|
||||
"$PrefixLineNo" "$PSCal" "$RunOff" "$Saturday" "$September"
|
||||
"$PrefixLineNo" "$PSCal" "$RunOff" "$Saturday" "$September" "$Shaded"
|
||||
"$SimpleCal" "$SortByDate" "$SortByPrio" "$SortByTime" "$SubsIndent"
|
||||
"$Sunday" "$SuppressImplicitWarnings" "$SuppressLRM" "$SysInclude" "$T" "$Tb" "$Td"
|
||||
"$TerminalBackground" "$TerminalHyperlinks" "$Thursday" "$TimeSep" "$TimetIs64bit" "$Tm" "$Today" "$TodoFilter"
|
||||
@@ -167,26 +167,151 @@
|
||||
|
||||
(defconst remind-builtin-functions
|
||||
(sort
|
||||
(list "_" "abs" "access" "adawn" "adusk" "ampm" "ansicolor" "args" "asc"
|
||||
"baseyr" "catch" "catcherr" "char" "choose" "codepoint" "coerce" "columns" "const" "current" "date"
|
||||
"datepart" "datetime" "dawn" "day" "daysinmon" "defined" "dosubst"
|
||||
"dusk" "easterdate" "escape" "eval" "evaltrig" "filedate" "filedatetime"
|
||||
"filedir" "filename" "getenv" "hebdate" "hebday" "hebmon" "hebyear" "hex"
|
||||
"hour" "htmlescape" "htmlstriptags" "iif" "index" "isany" "isconst" "isdst"
|
||||
"isleap" "isomitted" "ivritmon" "language" "localtoutc" "lower" "max"
|
||||
"mbasc" "mbindex" "mbstrlen" "mbsubstr" "min"
|
||||
"minsfromutc" "minute" "mon" "monnum" "moondate" "moondatetime"
|
||||
"moonphase" "moonrise" "moonrisedir" "moonset" "moonsetdir" "moontime"
|
||||
"multitrig" "ndawn" "ndusk" "nonconst" "nonomitted" "now" "ord" "orthodoxeaster"
|
||||
"ostype" "pad" "plural" "psmoon" "psshade" "realcurrent" "realnow"
|
||||
"realtoday" "rows" "sgn" "shell" "shellescape" "slide" "soleq"
|
||||
"stdout" "strlen" "substr" "sunrise" "sunset" "time" "timepart"
|
||||
"timezone" "today" "trig" "trigback" "trigbase" "trigcompletethrough" "trigdate" "trigdatetime"
|
||||
"trigdelta" "trigduration" "trigeventduration" "trigeventstart" "trigeventstarttz"
|
||||
"trigfrom" "trigger" "triginfo" "trigistodo" "trigmaxoverdue" "trigpriority" "trigrep"
|
||||
"trigscanfrom" "trigtags" "trigtime" "trigtimedelta" "trigtimerep" "trigtimetz" "trigtz"
|
||||
"triguntil" "trigvalid" "typeof" "tzconvert" "upper" "utctolocal"
|
||||
"value" "version" "weekno" "wkday" "wkdaynum" "year"
|
||||
(list
|
||||
"_"
|
||||
"abs"
|
||||
"access"
|
||||
"adawn"
|
||||
"adusk"
|
||||
"ampm"
|
||||
"ansicolor"
|
||||
"args"
|
||||
"asc"
|
||||
"baseyr"
|
||||
"catch"
|
||||
"catcherr"
|
||||
"char"
|
||||
"choose"
|
||||
"codepoint"
|
||||
"coerce"
|
||||
"columns"
|
||||
"const"
|
||||
"current"
|
||||
"date"
|
||||
"datepart"
|
||||
"datetime"
|
||||
"dawn"
|
||||
"day"
|
||||
"daysinmon"
|
||||
"defined"
|
||||
"dosubst"
|
||||
"dusk"
|
||||
"easterdate"
|
||||
"escape"
|
||||
"eval"
|
||||
"evaltrig"
|
||||
"filedate"
|
||||
"filedatetime"
|
||||
"filedir"
|
||||
"filename"
|
||||
"getenv"
|
||||
"hebdate"
|
||||
"hebday"
|
||||
"hebmon"
|
||||
"hebyear"
|
||||
"hex"
|
||||
"hour"
|
||||
"htmlescape"
|
||||
"htmlstriptags"
|
||||
"iif"
|
||||
"index"
|
||||
"isany"
|
||||
"isconst"
|
||||
"isdst"
|
||||
"isleap"
|
||||
"isomitted"
|
||||
"ivritmon"
|
||||
"language"
|
||||
"localtoutc"
|
||||
"lower"
|
||||
"max"
|
||||
"mbasc"
|
||||
"mbindex"
|
||||
"mblower"
|
||||
"mbstrlen"
|
||||
"mbsubstr"
|
||||
"mbupper"
|
||||
"min"
|
||||
"minsfromutc"
|
||||
"minute"
|
||||
"mon"
|
||||
"monnum"
|
||||
"moondate"
|
||||
"moondatetime"
|
||||
"moonphase"
|
||||
"moonrise"
|
||||
"moonrisedir"
|
||||
"moonset"
|
||||
"moonsetdir"
|
||||
"moontime"
|
||||
"multitrig"
|
||||
"ndawn"
|
||||
"ndusk"
|
||||
"nonconst"
|
||||
"nonomitted"
|
||||
"now"
|
||||
"ord"
|
||||
"orthodoxeaster"
|
||||
"ostype"
|
||||
"pad"
|
||||
"plural"
|
||||
"psmoon"
|
||||
"psshade"
|
||||
"realcurrent"
|
||||
"realnow"
|
||||
"realtoday"
|
||||
"rows"
|
||||
"sgn"
|
||||
"shell"
|
||||
"shellescape"
|
||||
"slide"
|
||||
"soleq"
|
||||
"stdout"
|
||||
"strlen"
|
||||
"substr"
|
||||
"sunrise"
|
||||
"sunset"
|
||||
"time"
|
||||
"timepart"
|
||||
"timezone"
|
||||
"today"
|
||||
"trig"
|
||||
"trigback"
|
||||
"trigbase"
|
||||
"trigcompletethrough"
|
||||
"trigdate"
|
||||
"trigdatetime"
|
||||
"trigdelta"
|
||||
"trigduration"
|
||||
"trigeventduration"
|
||||
"trigeventstart"
|
||||
"trigeventstarttz"
|
||||
"trigfrom"
|
||||
"trigger"
|
||||
"triginfo"
|
||||
"trigistodo"
|
||||
"trigmaxoverdue"
|
||||
"trigpriority"
|
||||
"trigrep"
|
||||
"trigscanfrom"
|
||||
"trigtags"
|
||||
"trigtime"
|
||||
"trigtimedelta"
|
||||
"trigtimerep"
|
||||
"trigtimetz"
|
||||
"trigtz"
|
||||
"triguntil"
|
||||
"trigvalid"
|
||||
"typeof"
|
||||
"tzconvert"
|
||||
"upper"
|
||||
"utctolocal"
|
||||
"value"
|
||||
"version"
|
||||
"weekno"
|
||||
"wkday"
|
||||
"wkdaynum"
|
||||
"year"
|
||||
)
|
||||
#'(lambda (a b) (> (length a) (length b)))))
|
||||
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
CHANGES TO REMIND
|
||||
|
||||
* VERSION 06.02.05 - 2026-03-02
|
||||
|
||||
- NEW FEATURE: rem2pdf: Add --avoid-overfull option. This makes the
|
||||
font size in a calendar box with many reminders smaller in an effort
|
||||
to fit everything neatly into the box.
|
||||
|
||||
- NEW FEATURE: rem2pdf: Add --entry-spacing option. This lets you
|
||||
adjust the spacing between entries in a calendar box. It defaults
|
||||
to one-half of the --border-size option. NOTE: In previous
|
||||
releases, --entry-spacing defaulted to the SAME size as
|
||||
--border-size, so unless you supply an --entry-spacing value to set
|
||||
it back, the PDF calendars produced by this version of rem2pdf will
|
||||
be slightly more compact than previous versions.
|
||||
|
||||
- DOCUMENTATION UPDATE: Clarify rules around use of Remind source code
|
||||
for training AI models.
|
||||
|
||||
- FIX: include/holidays/nz.rem: Fix spelling of "Auckland" and add
|
||||
Matariki. Fixes courtesy of Bart Joy.
|
||||
|
||||
* VERSION 06.02.04 - 2026-02-15
|
||||
|
||||
- IMPROVEMENT: remind: Add the mblower and mbupper functions, which are
|
||||
multibyte counterparts to lower and upper.
|
||||
|
||||
- MINOR NEW FEATURE: remind: Add the $Shaded system variable that counts
|
||||
how many times a "SPECIAL SHADE" reminder has triggered. See the
|
||||
man page for an example of how this can be useful.
|
||||
|
||||
- MINOR IMPROVEMENT: Make all programs that ship with Remind (remind,
|
||||
rem2ps, rem2pdf, rem2html and tkremind) accept a --version long option.
|
||||
|
||||
- CHANGE: remind: Remind used to warn if the POP-OMIT-CONTEXT, POP-VARS
|
||||
or POP-FUNCS command corresponding to the relevant PUSH command was
|
||||
in a different file than the PUSH command. But there are valid use
|
||||
cases for this, so Remind no longer emits the warning unless you use
|
||||
the "-dp" debugging flag.
|
||||
|
||||
* VERSION 06.02.03 - 2026-02-05
|
||||
|
||||
- NEW FEATURE: rem2html: Add a new --yaag option to produce a calendar
|
||||
|
||||
@@ -34,3 +34,36 @@ REM 27 December ADDOMIT SCANFROM -28 SATISFY [wkdaynum($T-2) == 0] MSG %"Christm
|
||||
REM 27 December ADDOMIT SCANFROM -28 SATISFY [wkdaynum($T-2) == 6] MSG %"Christmas Day (observed)%" %! %b.
|
||||
REM 28 December ADDOMIT SCANFROM -28 SATISFY [wkdaynum($T-2) == 0] MSG %"Boxing Day (observed)%" %! %b.
|
||||
REM 28 December ADDOMIT SCANFROM -28 SATISFY [wkdaynum($T-2) == 6] MSG %"Boxing Day (observed)%" %! %b.
|
||||
|
||||
# Matariki. Source:
|
||||
# https://www.legislation.govt.nz/act/public/2022/0014/23.0/LMS557893.html#LMS557893
|
||||
OMIT 2022-06-24 MSG Matariki
|
||||
OMIT 2023-07-14 MSG Matariki
|
||||
OMIT 2024-06-28 MSG Matariki
|
||||
OMIT 2025-06-20 MSG Matariki
|
||||
OMIT 2026-07-10 MSG Matariki
|
||||
OMIT 2027-06-25 MSG Matariki
|
||||
OMIT 2028-07-14 MSG Matariki
|
||||
OMIT 2029-07-06 MSG Matariki
|
||||
OMIT 2030-06-21 MSG Matariki
|
||||
OMIT 2031-07-11 MSG Matariki
|
||||
OMIT 2032-07-02 MSG Matariki
|
||||
OMIT 2033-06-24 MSG Matariki
|
||||
OMIT 2034-07-07 MSG Matariki
|
||||
OMIT 2035-06-29 MSG Matariki
|
||||
OMIT 2036-07-18 MSG Matariki
|
||||
OMIT 2037-07-10 MSG Matariki
|
||||
OMIT 2038-06-25 MSG Matariki
|
||||
OMIT 2039-07-15 MSG Matariki
|
||||
OMIT 2040-07-06 MSG Matariki
|
||||
OMIT 2041-07-19 MSG Matariki
|
||||
OMIT 2042-07-11 MSG Matariki
|
||||
OMIT 2043-07-03 MSG Matariki
|
||||
OMIT 2044-06-24 MSG Matariki
|
||||
OMIT 2045-07-07 MSG Matariki
|
||||
OMIT 2046-06-29 MSG Matariki
|
||||
OMIT 2047-07-19 MSG Matariki
|
||||
OMIT 2048-07-03 MSG Matariki
|
||||
OMIT 2049-06-25 MSG Matariki
|
||||
OMIT 2050-07-15 MSG Matariki
|
||||
OMIT 2051-06-30 MSG Matariki
|
||||
|
||||
@@ -10,4 +10,4 @@
|
||||
# If you want the national holidays as well, you must
|
||||
# also SYSINCLUDE holidays/nz.rem
|
||||
|
||||
REM Monday 26 January ADDOMIT SCANFROM -28 MSG %"Aukland Anniversary Day%" %! %b.
|
||||
REM Monday 26 January ADDOMIT SCANFROM -28 MSG %"Auckland Anniversary Day%" %! %b.
|
||||
|
||||
@@ -10,4 +10,4 @@
|
||||
# If you want the national holidays as well, you must
|
||||
# also SYSINCLUDE holidays/nz.rem
|
||||
|
||||
REM Monday 26 January ADDOMIT SCANFROM -28 MSG %"Aukland Anniversary Day%" %! %b.
|
||||
REM Monday 26 January ADDOMIT SCANFROM -28 MSG %"Auckland Anniversary Day%" %! %b.
|
||||
|
||||
@@ -21,6 +21,9 @@ render characters outside the ASCII character set, see
|
||||
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.B \-\-version
|
||||
Print the version of \fBrem2ps\fR and exit.
|
||||
.TP
|
||||
.B \-v
|
||||
Be more verbose. This causes \fBrem2ps\fR to print progress messages
|
||||
to the standard error stream. Normally, it is silent.
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
.TH REMIND 1 "@RELEASE_DATE@" "Remind" "VERSION @VERSION@"
|
||||
.SH NAME
|
||||
remind \- a sophisticated reminder service
|
||||
.SH THE BOOK OF REMIND
|
||||
This man page is a good \fIreference\fR for Remind. However, if you
|
||||
are a novice wishing to \fIlearn\fR Remind, I suggest downloading
|
||||
"The Book of Remind" from the Remind home page at https://dianne.skoll.ca/projects/remind/
|
||||
.SH SYNOPSIS
|
||||
.B remind [\fIoptions\fR] \fIfilename\fR [\fIdate\fR] [\fI*rep\fR] [\fItime\fR]
|
||||
.SH DESCRIPTION
|
||||
@@ -349,6 +353,10 @@ Echo lines when displaying error messages
|
||||
.B f
|
||||
Trace the reading of reminder files
|
||||
.TP
|
||||
.B p
|
||||
Issue warnings if a POP-OMIT-CONTEXT, POP-VARS or POP-FUNCS matches
|
||||
a corresponding PUSH that is in a different file.
|
||||
.TP
|
||||
.B s
|
||||
Trace expression parsing and display the internal expression node
|
||||
tree. This is unlikely to be useful unless you are working on
|
||||
@@ -2588,16 +2596,13 @@ a sequence of more than one byte. For example, in a UTF-8 environment,
|
||||
the string "🙂" contains one character but four bytes. And the string
|
||||
"één" contains three characters but five bytes.
|
||||
.PP
|
||||
\fBRemind\fR has a set of functions
|
||||
that work on \fIbytes\fR, namely \fBindex\fR, \fBstrlen\fR and \fBsubstr\fR.
|
||||
These are not safe to use on multi-byte strings; instead use
|
||||
\fBmbindex\fR, \fBmbstrlen\fR and \fBmbsubstr\fR. If you know \fIfor sure\fR
|
||||
that a string contains only single-byte characters, then the byte-oriented
|
||||
versions may be used and are faster than the multi-byte versions.
|
||||
.PP
|
||||
Some ancient or embedded systems may lack the C library functions needed
|
||||
to deal with multi-byte strings. In that case, the \fBmb\fIxxx\fR functions
|
||||
all return an error.
|
||||
\fBRemind\fR has a set of functions that work on \fIbytes\fR, namely
|
||||
\fBindex\fR, \fBstrlen\fR and \fBsubstr\fR, and several more. These
|
||||
are not safe to use on multi-byte strings; instead use \fBmbindex\fR,
|
||||
\fBmbstrlen\fR and \fBmbsubstr\fR, and the \fBmb\fR variants of the
|
||||
others. If you know \fIfor sure\fR that a string contains only
|
||||
single-byte characters, then the byte-oriented versions may be used
|
||||
and are faster than the multi-byte versions.
|
||||
.RE
|
||||
.TP
|
||||
.B TIME
|
||||
@@ -2638,7 +2643,7 @@ The following examples illustrate constants in \fBRemind\fR expressions:
|
||||
12, 36, \-10, 0, 1209, 0x1F, 0xfe00 (the last two demonstrate the use of hexadecimal constants)
|
||||
.TP
|
||||
.B STRING constants
|
||||
"Hello there", "This is a test", "\\nHello\\tThere", ""
|
||||
"Hello there", "This is a test", "\\nHello\\tThere", "", "π is Cool! 🙂"
|
||||
.PP
|
||||
.RS
|
||||
Note that the empty string is represented by "". \fBRemind\fR supports
|
||||
@@ -3361,6 +3366,30 @@ If non-zero, then the \fB\-p\fR option was supplied on the command line.
|
||||
.B $RunOff (read-only)
|
||||
If non-zero, the \fBRUN\fR directives are disabled.
|
||||
.TP
|
||||
.B $Shaded (read-only)
|
||||
Returns the number of times a \fBSHADE\fR special reminder has triggered.
|
||||
\fIThis variable is set only in calendar mode, not agenda mode\fR. You
|
||||
can use this variable to avoid shading a calendar day that has already
|
||||
been shaded.
|
||||
.RS
|
||||
.PP
|
||||
For example, suppose you want to shade all calendar boxes yellow
|
||||
\fIif\fR any reminders have triggered on that day. But if a box has
|
||||
been explicitly shaded, you don't want to overwrite that shading.
|
||||
You could use something like this:
|
||||
.PP
|
||||
.nf
|
||||
SET n $NumTrig
|
||||
# Do all your reminders here...
|
||||
|
||||
# If anything has triggered and the box is
|
||||
# not already shaded, then shade it yellow
|
||||
IF $NumTrig > n && !$Shaded
|
||||
REM SPECIAL SHADE 255 255 128
|
||||
ENDIF
|
||||
.fi
|
||||
.RE
|
||||
.TP
|
||||
.B $SimpleCal (read-only)
|
||||
Set to a non-zero value if \fIeither\fR of the \fB\-p\fR or \fB\-s\fR
|
||||
command-line options was supplied.
|
||||
@@ -4223,8 +4252,15 @@ Given a \fBDATETIME\fR object interpreted in the local time zone, return
|
||||
a \fBDATETIME\fR object that expresses the same time in UTC.
|
||||
.TP
|
||||
.B lower(s_string)
|
||||
Returns a \fBSTRING\fR with all upper-case bytes in \fIstring\fR
|
||||
converted to lower-case. \fBNote:\fR This function works correctly
|
||||
only for ASCII strings. If you are using Unicode characters outside
|
||||
the ASCII set, use \fBmblower\fR instead.
|
||||
.TP
|
||||
.B mblower(s_string)
|
||||
Returns a \fBSTRING\fR with all upper-case characters in \fIstring\fR
|
||||
converted to lower-case.
|
||||
converted to lower-case. This function works correctly on any
|
||||
Unicode string.
|
||||
.TP
|
||||
.B max(x_arg1 [,x_arg2...)
|
||||
Can take any number of arguments, and returns the maximum. The arguments
|
||||
@@ -5133,8 +5169,15 @@ of the time zone name.
|
||||
.PP
|
||||
.TP
|
||||
.B upper(s_string)
|
||||
Returns a \fBSTRING\fR with all lower-case bytes in \fIstring\fR
|
||||
converted to upper-case. \fBNote:\fR This function works correctly
|
||||
only for ASCII strings. If you are using Unicode characters outside
|
||||
the ASCII set, use \fBmbupper\fR instead.
|
||||
.TP
|
||||
.B mbupper(s_string)
|
||||
Returns a \fBSTRING\fR with all lower-case characters in \fIstring\fR
|
||||
converted to upper-case.
|
||||
converted to upper-case. This function works correctly on any
|
||||
Unicode string.
|
||||
.TP
|
||||
.B utctolocal(q_datetime)
|
||||
Given a \fBDATETIME\fR object interpreted in UTC, return a
|
||||
|
||||
@@ -18,10 +18,12 @@ binary. If you are using Tcl/Tk 8.5, you may also need either the Img
|
||||
or the tkpng extension to handle PNG images.
|
||||
|
||||
.SH COMMAND-LINE OPTIONS
|
||||
\fBTkRemind\fR itself has no command-line options. However, it passes
|
||||
any command-line argument starting with \fB\-\fR to \fBRemind\fR as an
|
||||
option. In addition, \fBTkRemind\fR will respect the \fB\-m\fR and
|
||||
\fB\-b1\fR options and adjust its appearance accordingly.
|
||||
\fBTkRemind\fR itself has only one command-line option:
|
||||
\fB\-\-version\fR, which makes it print the version of \fBTkRemind\fR
|
||||
and exit. Any other command-line argument starting with \fB\-\fR to
|
||||
\fBRemind\fR as an option. In addition, \fBTkRemind\fR will respect
|
||||
the \fB\-m\fR and \fB\-b1\fR options and adjust its appearance
|
||||
accordingly.
|
||||
.PP
|
||||
\fIRead_file\fR is the file from which \fBTkRemind\fR reads reminders.
|
||||
It is in standard \fBRemind\fR format. \fIWrite_file\fR is the file
|
||||
@@ -193,6 +195,12 @@ Select the appropriate paper size and orientation. Activate
|
||||
be the normal case unless you have many reminders in a particular
|
||||
day. (See the \fBrem2pdf\fR documentation.)
|
||||
|
||||
If you activate \fBAvoid over-full boxes\fR, then \fBTkRemind\fR
|
||||
will pass the \fB\-\-avoid\-overfull\fR option to \fBrem2pdf\fR. This
|
||||
will make it try to fit many reminders into a calendar box by shrinking
|
||||
the font. This option, if activated, also automatically activates
|
||||
\fBFill page\fR.
|
||||
|
||||
Finally, click \fBPrint\fR to print or \fBCancel\fR to cancel. Note
|
||||
that during printing, \fBRemind\fR is called with the
|
||||
\fB-itkremind=1\fR option and also an additional \fB-itkprint=1\fR
|
||||
|
||||
@@ -1119,7 +1119,7 @@ if ($Options{help}) {
|
||||
system("perldoc $0");
|
||||
exit(0);
|
||||
} elsif ($Options{version}) {
|
||||
print "rem2html version $rem2html_version.\n";
|
||||
print "rem2html version $rem2html_version\n";
|
||||
exit(0);
|
||||
}
|
||||
|
||||
@@ -1258,7 +1258,7 @@ td.rem-yaag-end-of-week {
|
||||
}
|
||||
|
||||
th.rem-yaag-end-of-week {
|
||||
border-right: 2px solid #4B4B4B;
|
||||
border-right-width: 3;
|
||||
}
|
||||
|
||||
th.rem-yaag-cal-hdr {
|
||||
|
||||
@@ -31,6 +31,7 @@ my $media_to_size = {
|
||||
};
|
||||
|
||||
my $help = 0;
|
||||
my $version = 0;
|
||||
|
||||
my $settings = {
|
||||
landscape => 0,
|
||||
@@ -41,7 +42,7 @@ my $settings = {
|
||||
media => 'Letter',
|
||||
width => 0,
|
||||
height => 0,
|
||||
|
||||
avoid_overfull_boxes => 0,
|
||||
title_font => 'Sans',
|
||||
header_font => 'Sans',
|
||||
daynum_font => 'Sans Bold Oblique',
|
||||
@@ -55,6 +56,7 @@ my $settings = {
|
||||
entry_size => 8,
|
||||
|
||||
border_size => 4,
|
||||
entry_spacing => -1,
|
||||
line_thickness => 1,
|
||||
|
||||
margin_top => 36,
|
||||
@@ -95,6 +97,7 @@ Options:
|
||||
--ps Output PostScript instead of PDF
|
||||
--eps Output encapsulated PostScript instead of PDF
|
||||
-cN Synonym for --small-calendars=N
|
||||
--avoid-overfull Shrink font size to avoid over-full boxes. Implies -e
|
||||
--left-numbers, -x Print day numbers on the left (monthly calendars only)
|
||||
--fill-page, -e Fill the entire page (monthly calendars only)
|
||||
--media=MEDIA, -mMEDIA Size for specified media
|
||||
@@ -111,6 +114,7 @@ Options:
|
||||
--header-size=S Specify size of font for weekday names
|
||||
--daynum-size=S Specify size of font for day numbers
|
||||
--entry-size=S Specify size of font for calendar entries
|
||||
--entry-spacing=S Specify extra spacing between calendar entries
|
||||
--border-size=S Specify size of gaps between items in 1/72nds of an inch
|
||||
--line-thickness=S Specify line thickness in 1/72nds of an inch
|
||||
--margin-top=S Specify top margin size in 1/72nds of an inch
|
||||
@@ -126,6 +130,7 @@ Options:
|
||||
--title-url=URL Link calendar title to URL
|
||||
--verbose, -v Print progress messages
|
||||
--help Display this help
|
||||
--version Print version and exit
|
||||
EOF
|
||||
}
|
||||
|
||||
@@ -137,6 +142,7 @@ my $ret = GetOptions('landscape|l' => \$settings->{landscape},
|
||||
'svg' => \$settings->{svg},
|
||||
'ps' => \$settings->{ps},
|
||||
'eps' => \$settings->{eps},
|
||||
'avoid-overfull' => \$settings->{avoid_overfull_boxes},
|
||||
'fill-page|e' => \$settings->{fill_entire_page},
|
||||
'weeks-per-page|p=i' => \$settings->{weeks_per_page},
|
||||
'media|m=s' => \$settings->{media},
|
||||
@@ -153,6 +159,7 @@ my $ret = GetOptions('landscape|l' => \$settings->{landscape},
|
||||
'header-size=f' => \$settings->{header_size},
|
||||
'daynum-size=f' => \$settings->{daynum_size},
|
||||
'entry-size=f' => \$settings->{entry_size},
|
||||
'entry-spacing=f' => \$settings->{entry_spacing},
|
||||
'border-size=f' => \$settings->{border_size},
|
||||
'line-thickness=f' => \$settings->{line_thickness},
|
||||
'margin-top=f' => \$settings->{margin_top},
|
||||
@@ -166,6 +173,7 @@ my $ret = GetOptions('landscape|l' => \$settings->{landscape},
|
||||
'header-color=s' => \$settings->{header_color},
|
||||
'daynum-color=s' => \$settings->{daynum_color},
|
||||
'smallcal-color=s' => \$settings->{smallcal_color},
|
||||
'version' => \$version,
|
||||
'help' => \$help
|
||||
);
|
||||
if (!$ret) {
|
||||
@@ -178,6 +186,20 @@ if ($help) {
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if ($version) {
|
||||
print "rem2pdf version $VERSION\n";
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if ($settings->{entry_spacing} < 0) {
|
||||
$settings->{entry_spacing} = 0.5 * $settings->{border_size};
|
||||
}
|
||||
|
||||
|
||||
if ($settings->{avoid_overfull_boxes}) {
|
||||
$settings->{fill_entire_page} = 1;
|
||||
}
|
||||
|
||||
my $bad = 0;
|
||||
foreach my $setting (qw(bg_color line_color title_color header_color daynum_color smallcal_color)) {
|
||||
my $c = $settings->{$setting};
|
||||
@@ -280,6 +302,9 @@ if ($settings->{svg}) {
|
||||
$settings->{width}, $settings->{height});
|
||||
}
|
||||
|
||||
# Save original entry size
|
||||
$settings->{original_entry_size} = $settings->{entry_size};
|
||||
|
||||
# set_metadata not available in older versions of Cairo
|
||||
eval { $surface->set_metadata('title', 'Calendar'); };
|
||||
eval { $surface->set_metadata('author', 'Remind (https://dianne.skoll.ca/projects/remind/)'); };
|
||||
@@ -473,6 +498,12 @@ the default top-right.
|
||||
|
||||
Make the calendar fill the available space on the page.
|
||||
|
||||
=item --avoid-overfull
|
||||
|
||||
If a calendar box is going to overflow, try to make the entries fit by
|
||||
decreasing the font size. Using the --avoid-overfull option automatically
|
||||
enables the --fill-page option.
|
||||
|
||||
=item --media=I<media>, -mI<media>
|
||||
|
||||
Specify the paper size (Letter, A4, etc.) For a list of valid media sizes,
|
||||
@@ -541,6 +572,12 @@ Specify the size of the blank border between the contents of a calendar
|
||||
box and the centre of the lines surrounding it, in 1/72ndths of an inch.
|
||||
The default is 4.
|
||||
|
||||
=item --entry-spacing=I<n>
|
||||
|
||||
Specify the amount of extra space, in 1/72ndths of an inch, to leave
|
||||
between calendar entries in a given calendar box. The default is
|
||||
one-half of the --border-size value.
|
||||
|
||||
=item --line-thickness=I<n>
|
||||
|
||||
Specify the thickness of the lines drawn on the calendar. The default is 1.
|
||||
@@ -620,6 +657,14 @@ to print per page; it is an integer that can range from 1 to 4.
|
||||
Print (on STDERR) the name of the month and year for each month that
|
||||
is rendered.
|
||||
|
||||
=item --version
|
||||
|
||||
Print the version of rem2pdf and exit.
|
||||
|
||||
=item --help
|
||||
|
||||
Print a brief summary of rem2pdf usage.
|
||||
|
||||
=back
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
@@ -608,7 +608,28 @@ sub draw_row
|
||||
for (my $col=0; $col<7; $col++) {
|
||||
my $day = $self->{daymap}->[$row]->[$col];
|
||||
next if ($day < 1);
|
||||
$self->draw_day($cr, $settings, $so_far, $day, $col, $height);
|
||||
if ($settings->{avoid_overfull_boxes}) {
|
||||
my $old_entry_size = $settings->{entry_size};
|
||||
my $old_spacing = $settings->{entry_spacing};
|
||||
my $drawn = 0;
|
||||
while ($settings->{entry_size} >= 2.0) {
|
||||
my $h = $self->draw_day($cr, $settings, $so_far, $day, $col, 0);
|
||||
if ($h <= $height) {
|
||||
$self->draw_day($cr, $settings, $so_far, $day, $col, $height);
|
||||
$drawn = 1;
|
||||
last;
|
||||
}
|
||||
$settings->{entry_size} -= 0.125;
|
||||
$settings->{entry_spacing} = $old_spacing * $settings->{entry_size} / $old_entry_size;
|
||||
}
|
||||
if (!$drawn) {
|
||||
$self->draw_day($cr, $settings, $so_far, $day, $col, $height);
|
||||
}
|
||||
$settings->{entry_size} = $old_entry_size;
|
||||
$settings->{entry_spacing} = $old_spacing;
|
||||
} else {
|
||||
$self->draw_day($cr, $settings, $so_far, $day, $col, $height);
|
||||
}
|
||||
}
|
||||
|
||||
return $so_far + $height + $settings->{border_size} * 2;
|
||||
@@ -717,8 +738,8 @@ sub draw_day
|
||||
next;
|
||||
}
|
||||
if ($done) {
|
||||
$so_far += $settings->{border_size};
|
||||
$entry_height += $settings->{border_size};
|
||||
$so_far += $settings->{entry_spacing};
|
||||
$entry_height += $settings->{entry_spacing};
|
||||
}
|
||||
$done = 1;
|
||||
my $h2 = $entry->render($self, $cr, $settings, $so_far, $day, $col, $height);
|
||||
|
||||
@@ -146,7 +146,7 @@ sub render
|
||||
my $layout = Pango::Cairo::create_layout($cr);
|
||||
|
||||
$layout->set_text(Encode::decode('UTF-8', $self->{body}));
|
||||
my $desc = Pango::FontDescription->from_string($settings->{entry_font} . ' ' . int(0.75 * $settings->{entry_size}) . 'px');
|
||||
my $desc = Pango::FontDescription->from_string($settings->{entry_font} . ' ' . int(0.75 * $settings->{original_entry_size}) . 'px');
|
||||
$layout->set_font_description($desc);
|
||||
my ($wid, $h) = $layout->get_pixel_size();
|
||||
|
||||
@@ -197,7 +197,7 @@ sub render
|
||||
my $layout;
|
||||
my $bodywidth = 0;
|
||||
if ($self->{fontsize} <= 0) {
|
||||
$self->{fontsize} = $settings->{entry_size};
|
||||
$self->{fontsize} = $settings->{original_entry_size};
|
||||
}
|
||||
if ($self->{size} <= 0) {
|
||||
$self->{size} = $settings->{daynum_size};
|
||||
|
||||
@@ -342,6 +342,9 @@ set Option(PrintOrient) landscape
|
||||
set OptDescr(PrintFill) "(0/1) If 1, fill entire page when printing"
|
||||
set Option(PrintFill) 1
|
||||
|
||||
set OptDescr(PrintAvoidOverfull) "(0/1) If 1, avoid over-full calendar boxes if possible"
|
||||
set Option(PrintAvoidOverfull) 0
|
||||
|
||||
set OptDescr(WrapCal) "(0/1) If 1, make printed calendars occupy at most 5 rows"
|
||||
set Option(WrapCal) 0
|
||||
|
||||
@@ -442,6 +445,10 @@ proc Initialize {} {
|
||||
set PSCmd "$Remind -itkremind=1 -itkprint=1 -pp%WEEKS% -l %EXTRA%"
|
||||
set i 0
|
||||
while {$i < $argc} {
|
||||
if {"[lindex $argv $i]" == "--version"} {
|
||||
puts "tkremind version @VERSION@"
|
||||
exit 0
|
||||
}
|
||||
if {[regexp -- {-[bgxim].*} [lindex $argv $i]]} {
|
||||
append CommandLine " [lindex $argv $i]"
|
||||
append PSCmd " [lindex $argv $i]"
|
||||
@@ -1754,7 +1761,8 @@ proc DoPrintHelper {} {
|
||||
radiobutton .p.landscape -text "Landscape" -variable Option(PrintOrient) -value landscape
|
||||
radiobutton .p.portrait -text "Portrait" -variable Option(PrintOrient) -value portrait
|
||||
|
||||
checkbutton .p.fill -text "Fill page" -variable Option(PrintFill)
|
||||
checkbutton .p.fill -text "Fill page" -variable Option(PrintFill) -command PrintFillButtonPressed
|
||||
checkbutton .p.avoid -text "Avoid over-full boxes" -variable Option(PrintAvoidOverfull) -command PrintAvoidOverfullButtonPressed
|
||||
checkbutton .p.wrap -text "Use at most 5 rows" -variable Option(WrapCal)
|
||||
checkbutton .p.right -text "Day numbers at top-right" -variable Option(PrintDaysRight)
|
||||
checkbutton .p.calendars -text "Print small calendars" -variable Option(PrintSmallCalendars)
|
||||
@@ -1766,7 +1774,7 @@ proc DoPrintHelper {} {
|
||||
wm protocol .p WM_DELETE_WINDOW { .p.cancel flash; .p.cancel invoke }
|
||||
pack .p.f1 .p.ff .p.f2 .p.f2a .p.f3 .p.f3a \
|
||||
-side top -fill both -expand 1 -anchor w
|
||||
pack .p.fill .p.wrap .p.right .p.calendars -in .p.f3a \
|
||||
pack .p.fill .p.avoid .p.wrap .p.right .p.calendars -in .p.f3a \
|
||||
-side top -anchor w -fill none -expand 0
|
||||
pack .p.f4 -side top -fill both -expand 1 -anchor w
|
||||
pack .p.f11 .p.f12 -in .p.f1 -side top -fill none -expand 0 -anchor w
|
||||
@@ -1857,6 +1865,9 @@ proc DoPrintHelper {} {
|
||||
append cmd " -e"
|
||||
}
|
||||
|
||||
if {$Option(PrintAvoidOverfull)} {
|
||||
append cmd " --avoid-overfull"
|
||||
}
|
||||
if {!$Option(PrintDaysRight)} {
|
||||
append cmd " -x"
|
||||
}
|
||||
@@ -1879,6 +1890,19 @@ proc DoPrintHelper {} {
|
||||
}
|
||||
}
|
||||
|
||||
proc PrintFillButtonPressed {} {
|
||||
global Option
|
||||
if { ! $Option(PrintFill) && $Option(PrintAvoidOverfull) } {
|
||||
set Option(PrintAvoidOverfull) 0
|
||||
}
|
||||
}
|
||||
|
||||
proc PrintAvoidOverfullButtonPressed {} {
|
||||
global Option
|
||||
if { ! $Option(PrintFill) && $Option(PrintAvoidOverfull) } {
|
||||
set Option(PrintFill) 1
|
||||
}
|
||||
}
|
||||
proc ShowPrintCommand { cmd } {
|
||||
global Option
|
||||
catch { destroy .pc }
|
||||
@@ -3602,11 +3626,11 @@ proc main {} {
|
||||
font create BoldFont {*}[font actual TkDefaultFont] -weight bold
|
||||
|
||||
global AppendFile HighestTagSoFar DayNames
|
||||
catch { SetFonts }
|
||||
Initialize
|
||||
catch {
|
||||
puts "\nTkRemind Copyright (C) 1996-2026 Dianne Skoll"
|
||||
}
|
||||
catch { SetFonts }
|
||||
Initialize
|
||||
|
||||
# If no $ConfigFile file, create an empty one
|
||||
if {![file exists $ConfigFile]} {
|
||||
|
||||
@@ -2123,8 +2123,9 @@ static int DoCalRem(ParsePtr p, int col)
|
||||
}
|
||||
}
|
||||
if (trig.typ == PASSTHRU_TYPE) {
|
||||
if (!PsCal && !strcasecmp(trig.passthru, "SHADE")) {
|
||||
if (dse == DSEToday) {
|
||||
if (!strcasecmp(trig.passthru, "SHADE") && dse == DSEToday) {
|
||||
Shaded++;
|
||||
if (!PsCal) {
|
||||
DBufInit(&obuf);
|
||||
r = DoSubst(p, &obuf, &trig, &tim, dse, CAL_MODE);
|
||||
if (r) {
|
||||
|
||||
51
src/funcs.c
51
src/funcs.c
@@ -140,9 +140,11 @@ static int FLower (func_info *);
|
||||
static int FMax (func_info *);
|
||||
static int FMbchar (func_info *);
|
||||
static int FMbindex (func_info *);
|
||||
static int FMblower (func_info *);
|
||||
static int FMbpad (func_info *);
|
||||
static int FMbstrlen (func_info *);
|
||||
static int FMbsubstr (func_info *);
|
||||
static int FMbupper (func_info *);
|
||||
static int FMin (func_info *);
|
||||
static int FMinsfromutc (func_info *);
|
||||
static int FMinute (func_info *);
|
||||
@@ -327,9 +329,11 @@ BuiltinFunc Func[] = {
|
||||
{ "max", 1, NO_MAX, 1, FMax, NULL },
|
||||
{ "mbchar", 1, NO_MAX, 1, FMbchar, NULL },
|
||||
{ "mbindex", 2, 3, 1, FMbindex, NULL },
|
||||
{ "mblower", 1, 1, 1, FMblower, NULL },
|
||||
{ "mbpad", 3, 4, 1, FMbpad, NULL },
|
||||
{ "mbstrlen", 1, 1, 1, FMbstrlen, NULL },
|
||||
{ "mbsubstr", 2, 3, 1, FMbsubstr, NULL },
|
||||
{ "mbupper", 1, 1, 1, FMbupper, NULL },
|
||||
{ "min", 1, NO_MAX, 1, FMin, NULL },
|
||||
{ "minsfromutc", 0, 2, 0, FMinsfromutc, NULL },
|
||||
{ "minute", 1, 1, 1, FMinute, NULL },
|
||||
@@ -5173,3 +5177,50 @@ print_builtinfunc_tokens(void)
|
||||
printf("%s\n", Func[i].name);
|
||||
}
|
||||
}
|
||||
|
||||
static int mbupper_lower(func_info *info, int upper)
|
||||
{
|
||||
wchar_t *ws;
|
||||
char *s;
|
||||
size_t i, len;
|
||||
int r;
|
||||
ASSERT_TYPE(0, STR_TYPE);
|
||||
len = mbstowcs(NULL, ARGSTR(0), 0);
|
||||
if (len == (size_t) -1) {
|
||||
return E_BAD_MB_SEQ;
|
||||
}
|
||||
ws = calloc(len+1, sizeof(wchar_t));
|
||||
if (!ws) {
|
||||
return E_NO_MEM;
|
||||
}
|
||||
(void) mbstowcs(ws, ARGSTR(0), len+1);
|
||||
for (i=0; i<len; i++) {
|
||||
if (upper) {
|
||||
ws[i] = towupper(ws[i]);
|
||||
} else {
|
||||
ws[i] = towlower(ws[i]);
|
||||
}
|
||||
}
|
||||
len = wcstombs(NULL, ws, 0);
|
||||
s = calloc(len+1, 1);
|
||||
if (!s) {
|
||||
free(ws);
|
||||
return E_NO_MEM;
|
||||
}
|
||||
(void) wcstombs(s, ws, len+1);
|
||||
r = RetStrVal(s, info);
|
||||
free(s);
|
||||
free(ws);
|
||||
return r;
|
||||
}
|
||||
|
||||
static int FMblower(func_info *info)
|
||||
{
|
||||
return mbupper_lower(info, 0);
|
||||
}
|
||||
|
||||
static int FMbupper(func_info *info)
|
||||
{
|
||||
return mbupper_lower(info, 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -106,6 +106,7 @@ EXTERN INIT( int DefaultPrio, NO_PRIORITY);
|
||||
EXTERN INIT( int SysTime, -1);
|
||||
EXTERN INIT( int LocalSysTime, -1);
|
||||
EXTERN INIT( int ParseUntriggered, 0);
|
||||
EXTERN INIT( int Shaded, 0);
|
||||
|
||||
EXTERN char const *InitialFile;
|
||||
EXTERN char const *LocalTimeZone;
|
||||
|
||||
@@ -668,6 +668,7 @@ void InitRemind(int argc, char const *argv[])
|
||||
case 'D':
|
||||
while (*arg) {
|
||||
switch(*arg++) {
|
||||
case 'p': case 'P': DebugFlag |= DB_PUSHPOP; break;
|
||||
case 's': case 'S': DebugFlag |= DB_PARSE_EXPR; break;
|
||||
case 'h': case 'H': DebugFlag |= DB_HASHSTATS; break;
|
||||
case 'e': case 'E': DebugFlag |= DB_ECHO_LINE; break;
|
||||
|
||||
@@ -295,6 +295,7 @@ PerIterationInit(void)
|
||||
DefaultColorG = -1;
|
||||
DefaultColorB = -1;
|
||||
NumTriggered = 0;
|
||||
Shaded = 0;
|
||||
JSONLinesEmitted = 0;
|
||||
ClearLastTriggers();
|
||||
ClearDedupeTable();
|
||||
@@ -1388,6 +1389,12 @@ static int DoDebug(ParsePtr p)
|
||||
val = 0;
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
case 'P':
|
||||
if (val) DebugFlag |= DB_PUSHPOP;
|
||||
else DebugFlag &= ~DB_PUSHPOP;
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
case 'E':
|
||||
if (val) DebugFlag |= DB_ECHO_LINE;
|
||||
|
||||
@@ -176,8 +176,10 @@ int PopOmitContext(ParsePtr p)
|
||||
/* Remove the context from the stack */
|
||||
SavedOmitContexts = c->next;
|
||||
|
||||
if (c->filename && fname && strcmp(c->filename, fname)) {
|
||||
Wprint(tr("POP-OMIT-CONTEXT at %s:%d matches PUSH-OMIT-CONTEXT in different file: %s:%d"), fname, LineNo, c->filename, c->lineno);
|
||||
if (DebugFlag & DB_PUSHPOP) {
|
||||
if (c->filename && fname && strcmp(c->filename, fname)) {
|
||||
Wprint(tr("POP-OMIT-CONTEXT at %s:%d matches PUSH-OMIT-CONTEXT in different file: %s:%d"), fname, LineNo, c->filename, c->lineno);
|
||||
}
|
||||
}
|
||||
/* Free memory used by the saved context */
|
||||
if (c->partsave) free(c->partsave);
|
||||
|
||||
@@ -985,6 +985,14 @@ static void Init(int argc, char const *argv[])
|
||||
|
||||
case 'e': FillPage = 1; break;
|
||||
|
||||
case '-':
|
||||
if (!strcmp(s, "version")) {
|
||||
printf("rem2ps version %s\n", VERSION);
|
||||
exit(0);
|
||||
}
|
||||
Usage("Unrecognized option");
|
||||
break;
|
||||
|
||||
default: Usage("Unrecognized option");
|
||||
}
|
||||
}
|
||||
@@ -1016,6 +1024,7 @@ void Usage(char const *s)
|
||||
fprintf(stderr, "-e Make calendar fill entire page\n");
|
||||
fprintf(stderr, "-x Put day numbers on left instead of right\n");
|
||||
fprintf(stderr, "-o[lrtb] marg Specify left, right, top and bottom margins\n");
|
||||
fprintf(stderr, "--version Print the version of rem2ps and exit\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
||||
25
src/types.h
25
src/types.h
@@ -221,18 +221,19 @@ typedef Parser *ParsePtr; /* Pointer to parser structure */
|
||||
#define NO_MAX 127
|
||||
|
||||
/* DEFINES for debugging flags */
|
||||
#define DB_PRTLINE 0x001
|
||||
#define DB_PRTEXPR 0x002
|
||||
#define DB_PRTTRIG 0x004
|
||||
#define DB_DUMP_VARS 0x008
|
||||
#define DB_ECHO_LINE 0x010
|
||||
#define DB_TRACE_FILES 0x020
|
||||
#define DB_PARSE_EXPR 0x040
|
||||
#define DB_HASHSTATS 0x080
|
||||
#define DB_TRANSLATE 0x100
|
||||
#define DB_NONCONST 0x200
|
||||
#define DB_UNUSED_VARS 0x400
|
||||
#define DB_SWITCH_ZONE 0x800
|
||||
#define DB_PRTLINE 0x0001
|
||||
#define DB_PRTEXPR 0x0002
|
||||
#define DB_PRTTRIG 0x0004
|
||||
#define DB_DUMP_VARS 0x0008
|
||||
#define DB_ECHO_LINE 0x0010
|
||||
#define DB_TRACE_FILES 0x0020
|
||||
#define DB_PARSE_EXPR 0x0040
|
||||
#define DB_HASHSTATS 0x0080
|
||||
#define DB_TRANSLATE 0x0100
|
||||
#define DB_NONCONST 0x0200
|
||||
#define DB_UNUSED_VARS 0x0400
|
||||
#define DB_SWITCH_ZONE 0x0800
|
||||
#define DB_PUSHPOP 0x1000
|
||||
|
||||
/* Enumeration of the tokens */
|
||||
enum TokTypes
|
||||
|
||||
@@ -744,8 +744,10 @@ int PopUserFuncs(ParsePtr p)
|
||||
return E_POPF_NO_PUSH;
|
||||
}
|
||||
UserFuncStack = UserFuncStack->next;
|
||||
if (strcmp(pf->filename, GetCurrentFilename())) {
|
||||
Wprint(tr("POP-FUNCS at %s:%d matches PUSH-FUNCS in different file: %s:%d"), GetCurrentFilename(), LineNo, pf->filename, pf->lineno);
|
||||
if (DebugFlag & DB_PUSHPOP) {
|
||||
if (strcmp(pf->filename, GetCurrentFilename())) {
|
||||
Wprint(tr("POP-FUNCS at %s:%d matches PUSH-FUNCS in different file: %s:%d"), GetCurrentFilename(), LineNo, pf->filename, pf->lineno);
|
||||
}
|
||||
}
|
||||
for (i=0; i<pf->num_funcs; i++) {
|
||||
UserFunc *clone = pf->funcs[i];
|
||||
|
||||
@@ -1101,6 +1101,7 @@ static SysVar SysVarArr[] = {
|
||||
{"RunOff", 0, INT_TYPE, &RunDisabled, 0, 0 },
|
||||
{"Saturday", 1, TRANS_TYPE, "Saturday", 0, 0 },
|
||||
{"September", 1, TRANS_TYPE, "September", 0, 0 },
|
||||
{"Shaded" , 0, INT_TYPE, &Shaded, 0, 0 },
|
||||
{"SimpleCal", 0, INT_TYPE, &DoSimpleCalendar, 0, 0 },
|
||||
{"SortByDate", 0, INT_TYPE, &SortByDate, 0, 0 },
|
||||
{"SortByPrio", 0, INT_TYPE, &SortByPrio, 0, 0 },
|
||||
@@ -1343,8 +1344,10 @@ PopVars(ParsePtr p)
|
||||
return E_POPV_NO_PUSH;
|
||||
}
|
||||
VarStack = VarStack->next;
|
||||
if (strcmp(pv->filename, GetCurrentFilename())) {
|
||||
Wprint(tr("POP-VARS at %s:%d matches PUSH-VARS in different file: %s:%d"), GetCurrentFilename(), LineNo, pv->filename, pv->lineno);
|
||||
if (DebugFlag & DB_PUSHPOP) {
|
||||
if (strcmp(pv->filename, GetCurrentFilename())) {
|
||||
Wprint(tr("POP-VARS at %s:%d matches PUSH-VARS in different file: %s:%d"), GetCurrentFilename(), LineNo, pv->filename, pv->lineno);
|
||||
}
|
||||
}
|
||||
|
||||
/* Pop the sysvars */
|
||||
|
||||
@@ -257,6 +257,7 @@ Makefiles
|
||||
Marczykowski
|
||||
Marek
|
||||
Marinus
|
||||
Matariki
|
||||
MaxFullOmits
|
||||
MaxLateMinutes
|
||||
MaxPartialOmits
|
||||
@@ -543,6 +544,7 @@ difftime
|
||||
doesn
|
||||
dosubst
|
||||
doublequote
|
||||
dp
|
||||
dq
|
||||
dqi
|
||||
dqis
|
||||
@@ -687,10 +689,12 @@ maxlen
|
||||
maybexs
|
||||
mbchar
|
||||
mbindex
|
||||
mblower
|
||||
mbpad
|
||||
mbstowcs
|
||||
mbstrlen
|
||||
mbsubstr
|
||||
mbupper
|
||||
md
|
||||
memcpy
|
||||
messageBox
|
||||
@@ -754,6 +758,7 @@ noto
|
||||
nqueued
|
||||
nroff
|
||||
num
|
||||
nz
|
||||
ok
|
||||
oktober
|
||||
ol
|
||||
@@ -995,6 +1000,7 @@ ziens
|
||||
zj
|
||||
zn
|
||||
één
|
||||
π
|
||||
א
|
||||
אב
|
||||
אדר
|
||||
|
||||
15
tests/shaded.rem
Normal file
15
tests/shaded.rem
Normal file
@@ -0,0 +1,15 @@
|
||||
REM Wed SPECIAL SHADE 255 0 0
|
||||
IF !$Shaded
|
||||
REM 15 SPECIAL SHADE 0 255 0
|
||||
ENDIF
|
||||
IF !$Shaded
|
||||
REM SATISFY [$Td % 4 == 0] SPECIAL SHADE 0 0 255
|
||||
ENDIF
|
||||
|
||||
IF !$Shaded
|
||||
REM Sunday SPECIAL SHADE 0 255 255
|
||||
ENDIF
|
||||
|
||||
IF !$Shaded
|
||||
REM SPECIAL SHADE 255 255 0
|
||||
ENDIF
|
||||
4
tests/test-pushpop1.rem
Normal file
4
tests/test-pushpop1.rem
Normal file
@@ -0,0 +1,4 @@
|
||||
PUSH-OMIT-CONTEXT
|
||||
PUSH-FUNCS a b c
|
||||
PUSH-VARS a b c
|
||||
DO test-pushpop2.rem
|
||||
4
tests/test-pushpop2.rem
Normal file
4
tests/test-pushpop2.rem
Normal file
@@ -0,0 +1,4 @@
|
||||
POP-VARS
|
||||
POP-FUNCS
|
||||
POP-OMIT-CONTEXT
|
||||
|
||||
@@ -455,8 +455,8 @@ $REMIND -c ../tests/test-addomit.rem 1 Sep 2021 >> $OUT
|
||||
$REMIND -cu ../tests/utf-8.rem 1 Nov 2019 >> $OUT
|
||||
$REMIND -cu '-i$SuppressLRM=1' ../tests/utf-8.rem 1 Nov 2019 >> $OUT
|
||||
|
||||
TZ=America/Toronto $REMIND -dxe ../tests/tz.rem >> $OUT 2>&1
|
||||
TZ=Europe/Berlin $REMIND -dxe ../tests/tz.rem >> $OUT 2>&1
|
||||
TZ=America/Toronto $REMIND -dxe ../tests/tz.rem 2026-02-01 >> $OUT 2>&1
|
||||
TZ=Europe/Berlin $REMIND -dxe ../tests/tz.rem 2026-02-01 >> $OUT 2>&1
|
||||
|
||||
$REMIND ../tests/soleq.rem 1 April 2044 >> $OUT 2>&1
|
||||
|
||||
@@ -479,18 +479,18 @@ echo "REM May 22 +10 MSG Bar %b" | $REMIND -tz - 2023-05-21 >> $OUT 2>&1
|
||||
rm -rf include_dir/ww
|
||||
touch include_dir/ww
|
||||
chmod 0666 include_dir/ww
|
||||
$REMIND include_dir/ww >> $OUT 2>&1
|
||||
$REMIND include_dir/ww 2026-02-01 >> $OUT 2>&1
|
||||
rm -rf include_dir/ww
|
||||
|
||||
# World-writable directory
|
||||
mkdir -p include_dir/ww
|
||||
touch include_dir/ww/0.rem
|
||||
chmod 0777 include_dir/ww
|
||||
$REMIND include_dir/ww >> $OUT 2>&1
|
||||
$REMIND include_dir/ww 2026-02-01 >> $OUT 2>&1
|
||||
rm -rf include_dir/ww
|
||||
|
||||
# This segfaulted in 04.02.03
|
||||
$REMIND -h '-imsgprefix(x)="foo"' /dev/null >> $OUT 2>&1
|
||||
$REMIND -h '-imsgprefix(x)="foo"' /dev/null 2026-02-01 >> $OUT 2>&1
|
||||
|
||||
# Test --version long option
|
||||
$REMIND --version >> $OUT 2>&1
|
||||
@@ -585,19 +585,19 @@ EOF
|
||||
|
||||
(echo 'BANNER %'; echo 'REM 29 MSG No bug') | $REMIND -dt - 29 Feb 2024 >> $OUT 2>&1
|
||||
|
||||
$REMIND -ifoo - <<'EOF' >> $OUT 2>&1
|
||||
$REMIND -ifoo - 2026-02-01 <<'EOF' >> $OUT 2>&1
|
||||
BANNER %
|
||||
DUMP
|
||||
EOF
|
||||
|
||||
$REMIND '-i$AddBlankLines' - <<'EOF' >> $OUT 2>&1
|
||||
$REMIND '-i$AddBlankLines' - 2026-02-01 <<'EOF' >> $OUT 2>&1
|
||||
BANNER %
|
||||
DUMP $AddBlankLines
|
||||
EOF
|
||||
|
||||
$REMIND ../tests/expr.rem >> $OUT 2>&1
|
||||
$REMIND ../tests/expr.rem 2026-02-01 >> $OUT 2>&1
|
||||
|
||||
$REMIND - <<'EOF' >> $OUT 2>&1
|
||||
$REMIND - 2026-02-01 <<'EOF' >> $OUT 2>&1
|
||||
PUSH
|
||||
POP
|
||||
PUSH
|
||||
@@ -709,7 +709,7 @@ echo "" >> $OUT
|
||||
$REMIND --print-tokens < /dev/null >> $OUT 2>&1
|
||||
|
||||
# Torture test #2
|
||||
$REMIND ../tests/torture2.rem >> $OUT 2>&1
|
||||
$REMIND ../tests/torture2.rem 2026-02-01 >> $OUT 2>&1
|
||||
|
||||
# Expression error-reporting
|
||||
$REMIND -de - 1 Feb 2024 <<'EOF' >> $OUT 2>&1
|
||||
@@ -810,10 +810,10 @@ REM Wed MSG Wookie
|
||||
EOF
|
||||
|
||||
# Test year-folding
|
||||
TZ=America/Toronto $REMIND -dx ../tests/yearfold.rem >> $OUT 2>&1
|
||||
TZ=America/Toronto $REMIND -dx ../tests/yearfold.rem 2026-02-01 >> $OUT 2>&1
|
||||
|
||||
# Test unused-variable debugging
|
||||
$REMIND -du - <<'EOF' >> $OUT 2>&1
|
||||
$REMIND -du - 2026-02-01 <<'EOF' >> $OUT 2>&1
|
||||
set a 1
|
||||
set b a*2
|
||||
set c "What"
|
||||
@@ -987,6 +987,13 @@ REM 15 INFO "Url: https://dianne.skoll.ca" CAL Hello, linky 3!
|
||||
REM 15 INFO "Url: https://dianne.skoll.ca" SPECIAL COLOR 255 0 0 Hello, linky 4!
|
||||
EOF
|
||||
|
||||
# Test the $Shaded system variable
|
||||
$REMIND -pp ../tests/shaded.rem 2026-02-01 >> $OUT 2>&1
|
||||
|
||||
# Test the push/pop warnings
|
||||
$REMIND ../tests/test-pushpop1.rem 2026-01-01 >> $OUT 2>&1
|
||||
$REMIND -dp ../tests/test-pushpop1.rem 2026-01-01 >> $OUT 2>&1
|
||||
|
||||
cmp -s $OUT $CMP
|
||||
if [ "$?" = "0" ]; then
|
||||
echo "Remind: Acceptance tests ${GRN}PASSED${NRM}"
|
||||
|
||||
@@ -1046,7 +1046,7 @@ set a057 value("a05"+"6")
|
||||
"a05" + "6" => "a056"
|
||||
value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH"
|
||||
set a058 version()
|
||||
version() => "06.02.03"
|
||||
version() => "06.02.05"
|
||||
set a059 wkday(today())
|
||||
today() => 1991-02-16
|
||||
wkday(1991-02-16) => "Saturday"
|
||||
@@ -2609,7 +2609,7 @@ a056 "SDFJHSDF KSJDFH KJSDFH KSJDFH"
|
||||
a007 "1991-02-16"
|
||||
a057 "SDFJHSDF KSJDFH KJSDFH KSJDFH"
|
||||
a008 "11:44"
|
||||
a058 "06.02.03"
|
||||
a058 "06.02.05"
|
||||
a059 "Saturday"
|
||||
a010 12
|
||||
a060 6
|
||||
@@ -5563,8 +5563,8 @@ REM SATISFY ""
|
||||
REM SATISFY [version() > "01.00.00"]
|
||||
../tests/test.rem(1074): SATISFY: expression has no reference to trigdate() or $T...
|
||||
../tests/test.rem(1074): Trig = Saturday, 16 February, 1991
|
||||
version() => "06.02.03"
|
||||
"06.02.03" > "01.00.00" => 1
|
||||
version() => "06.02.05"
|
||||
"06.02.05" > "01.00.00" => 1
|
||||
../tests/test.rem(1074): Trig(satisfied) = Saturday, 16 February, 1991
|
||||
REM SATISFY [max(x, max(x, 1, 2, 3), 4, 5, 6) * 5]
|
||||
../tests/test.rem(1075): SATISFY: expression has no reference to trigdate() or $T...
|
||||
@@ -16767,7 +16767,11 @@ mbpad("
|
||||
../tests/test.rem(1902): Invalid value for system variable
|
||||
../tests/test.rem(1903): Invalid value for system variable
|
||||
../tests/test.rem(1904): Invalid value for system variable
|
||||
DynBuf Mallocs: 1124 mallocs; 31872896 bytes
|
||||
mbupper("öÖçÇéôñÑÉÊ") => "ÖÖÇÇÉÔÑÑÉÊ"
|
||||
mblower("öÖçÇéôñÑÉÊ") => "ööççéôññéê"
|
||||
upper("öÖçÇéôñÑÉÊ") => "öÖçÇéôñÑÉÊ"
|
||||
lower("öÖçÇéôñÑÉÊ") => "öÖçÇéôñÑÉÊ"
|
||||
DynBuf Mallocs: 1132 mallocs; 31873408 bytes
|
||||
Variable hash table statistics:
|
||||
Entries: 100146; Buckets: 87719; Non-empty Buckets: 66303
|
||||
Maxlen: 5; Minlen: 0; Avglen: 1.142; Stddev: 0.878; Avg nonempty len: 1.510
|
||||
@@ -16789,7 +16793,7 @@ Expression nodes high-water: 302076
|
||||
Expression nodes leaked: 0
|
||||
Parse level high-water: 34
|
||||
Max expr node evaluations per line: 2001
|
||||
Total expression node evaluations: 106738
|
||||
Total expression node evaluations: 106746
|
||||
|
||||
Test 2
|
||||
|
||||
@@ -23827,7 +23831,7 @@ SECURITY: Won't read world-writable file or directory!
|
||||
Error reading include_dir/ww: Can't open file
|
||||
SECURITY: Won't read world-writable file or directory!
|
||||
Error reading include_dir/ww: No files matching *.rem
|
||||
06.02.03
|
||||
06.02.05
|
||||
Enabling test mode: This is meant for the acceptance test.
|
||||
Do not use --test in production.
|
||||
In test mode, the system time is fixed at 2025-01-06@19:00
|
||||
@@ -24776,9 +24780,11 @@ lower
|
||||
max
|
||||
mbchar
|
||||
mbindex
|
||||
mblower
|
||||
mbpad
|
||||
mbstrlen
|
||||
mbsubstr
|
||||
mbupper
|
||||
min
|
||||
minsfromutc
|
||||
minute
|
||||
@@ -24945,6 +24951,7 @@ $PSCal
|
||||
$RunOff
|
||||
$Saturday
|
||||
$September
|
||||
$Shaded
|
||||
$SimpleCal
|
||||
$SortByDate
|
||||
$SortByPrio
|
||||
@@ -40230,4 +40237,44 @@ February 28
|
||||
+----------+----------+----------+----------+----------+----------+----------+
|
||||
|26 |27 |28 |29 |30 |31 | |
|
||||
+----------+----------+----------+----------+----------+----------+----------+
|
||||
|
||||
# translations
|
||||
{"LANGID":"en"}
|
||||
# rem2ps2 begin
|
||||
February 2026 28 0 0
|
||||
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
|
||||
January 31
|
||||
March 31
|
||||
{"date":"2026-02-01","filename":"../tests/shaded.rem","lineno":10,"passthru":"SHADE","wd":["Sunday"],"is_todo":0,"priority":5000,"if_depth":1,"r":0,"g":255,"b":255,"body":"0 255 255"}
|
||||
{"date":"2026-02-02","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-03","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-04","filename":"../tests/shaded.rem","lineno":1,"passthru":"SHADE","wd":["Wednesday"],"is_todo":0,"priority":5000,"r":255,"g":0,"b":0,"body":"255 0 0"}
|
||||
{"date":"2026-02-05","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-06","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-07","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-08","filename":"../tests/shaded.rem","lineno":6,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":0,"g":0,"b":255,"body":"0 0 255"}
|
||||
{"date":"2026-02-09","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-10","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-11","filename":"../tests/shaded.rem","lineno":1,"passthru":"SHADE","wd":["Wednesday"],"is_todo":0,"priority":5000,"r":255,"g":0,"b":0,"body":"255 0 0"}
|
||||
{"date":"2026-02-12","filename":"../tests/shaded.rem","lineno":6,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":0,"g":0,"b":255,"body":"0 0 255"}
|
||||
{"date":"2026-02-13","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-14","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-15","filename":"../tests/shaded.rem","lineno":3,"passthru":"SHADE","d":15,"is_todo":0,"priority":5000,"if_depth":1,"r":0,"g":255,"b":0,"body":"0 255 0"}
|
||||
{"date":"2026-02-16","filename":"../tests/shaded.rem","lineno":6,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":0,"g":0,"b":255,"body":"0 0 255"}
|
||||
{"date":"2026-02-17","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-18","filename":"../tests/shaded.rem","lineno":1,"passthru":"SHADE","wd":["Wednesday"],"is_todo":0,"priority":5000,"r":255,"g":0,"b":0,"body":"255 0 0"}
|
||||
{"date":"2026-02-19","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-20","filename":"../tests/shaded.rem","lineno":6,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":0,"g":0,"b":255,"body":"0 0 255"}
|
||||
{"date":"2026-02-21","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-22","filename":"../tests/shaded.rem","lineno":10,"passthru":"SHADE","wd":["Sunday"],"is_todo":0,"priority":5000,"if_depth":1,"r":0,"g":255,"b":255,"body":"0 255 255"}
|
||||
{"date":"2026-02-23","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-24","filename":"../tests/shaded.rem","lineno":6,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":0,"g":0,"b":255,"body":"0 0 255"}
|
||||
{"date":"2026-02-25","filename":"../tests/shaded.rem","lineno":1,"passthru":"SHADE","wd":["Wednesday"],"is_todo":0,"priority":5000,"r":255,"g":0,"b":0,"body":"255 0 0"}
|
||||
{"date":"2026-02-26","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-27","filename":"../tests/shaded.rem","lineno":14,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":255,"g":255,"b":0,"body":"255 255 0"}
|
||||
{"date":"2026-02-28","filename":"../tests/shaded.rem","lineno":6,"passthru":"SHADE","is_todo":0,"priority":5000,"if_depth":1,"r":0,"g":0,"b":255,"body":"0 0 255"}
|
||||
# rem2ps2 end
|
||||
No reminders.
|
||||
../tests/test-pushpop2.rem(1): POP-VARS at ../tests/test-pushpop2.rem:1 matches PUSH-VARS in different file: ../tests/test-pushpop1.rem:3
|
||||
../tests/test-pushpop2.rem(2): POP-FUNCS at ../tests/test-pushpop2.rem:2 matches PUSH-FUNCS in different file: ../tests/test-pushpop1.rem:2
|
||||
../tests/test-pushpop2.rem(3): POP-OMIT-CONTEXT at ../tests/test-pushpop2.rem:3 matches PUSH-OMIT-CONTEXT in different file: ../tests/test-pushpop1.rem:1
|
||||
No reminders.
|
||||
|
||||
@@ -1903,6 +1903,14 @@ SET $TimeSep "FOO"
|
||||
SET $DateSep "BAR"
|
||||
SET $DefaultColor "My oh my, what lovely eyes!"
|
||||
|
||||
# mbupper and mblower
|
||||
DEBUG +x
|
||||
SET a mbupper("öÖçÇéôñÑÉÊ")
|
||||
SET a mblower("öÖçÇéôñÑÉÊ")
|
||||
SET a upper("öÖçÇéôñÑÉÊ")
|
||||
SET a lower("öÖçÇéôñÑÉÊ")
|
||||
DEBUG -x
|
||||
|
||||
# Don't want Remind to queue reminders
|
||||
EXIT
|
||||
|
||||
|
||||
Reference in New Issue
Block a user