mirror of
https://salsa.debian.org/dskoll/remind.git
synced 2026-04-16 06:18:47 +02:00
Allow INCLUDE/DO/SYSINCLUDE to take a QuotedString argument. This allows for filenames with spaces in them.
This commit is contained in:
@@ -1927,19 +1927,18 @@ commands.
|
||||
.SH THE DO, INCLUDE AND SYSINCLUDE COMMANDS
|
||||
.PP
|
||||
\fBRemind\fR allows you to include other files in your reminder script,
|
||||
similar to the C preprocessor #include directive. For example, your
|
||||
system administrator may maintain a file of holidays or system-wide
|
||||
reminders. You can include these in your reminder script as follows:
|
||||
similar to the C preprocessor #include directive. For example, you
|
||||
might organize different reminders into different files like this:
|
||||
.PP
|
||||
.nf
|
||||
INCLUDE /usr/share/remind/holidays
|
||||
INCLUDE /usr/share/remind/reminders
|
||||
INCLUDE holidays.rem
|
||||
INCLUDE birthdays.rem
|
||||
INCLUDE "quote files with spaces.rem"
|
||||
.fi
|
||||
.PP
|
||||
(The actual pathnames vary from system to system - ask your system
|
||||
administrator.)
|
||||
.PP
|
||||
\fBINCLUDE\fR files can be nested up to a depth of 8.
|
||||
\fBINCLUDE\fR files can be nested up to a depth of 8. As shown above, if a
|
||||
filename has spaces in it (not recommended!) you can use double-quotes
|
||||
around the filename.
|
||||
.PP
|
||||
If you specify a filename of "-" in the \fBINCLUDE\fR command, \fBRemind\fR
|
||||
will begin reading from standard input.
|
||||
|
||||
@@ -608,7 +608,7 @@ int DoInclude(ParsePtr p, enum TokTypes tok)
|
||||
DBufInit(&buf);
|
||||
DBufInit(&fullname);
|
||||
DBufInit(&path);
|
||||
if ( (r=ParseToken(p, &buf)) ) return r;
|
||||
if ( (r=ParseTokenOrQuotedString(p, &buf)) ) return r;
|
||||
e = VerifyEoln(p);
|
||||
if (e) Eprint("%s", GetErr(e));
|
||||
|
||||
|
||||
18
src/main.c
18
src/main.c
@@ -600,6 +600,24 @@ int ParseNonSpaceChar(ParsePtr p, int *err, int peek)
|
||||
return ch;
|
||||
}
|
||||
|
||||
/***************************************************************/
|
||||
/* */
|
||||
/* ParseTokenOrQuotedString */
|
||||
/* */
|
||||
/* Parse either a token or a double-quote-delimited string. */
|
||||
/* */
|
||||
/***************************************************************/
|
||||
int ParseTokenOrQuotedString(ParsePtr p, DynamicBuffer *dbuf)
|
||||
{
|
||||
int c, err;
|
||||
c = ParseNonSpaceChar(p, &err, 1);
|
||||
if (err) return err;
|
||||
if (c != '"') {
|
||||
return ParseToken(p, dbuf);
|
||||
}
|
||||
return ParseQuotedString(p, dbuf);
|
||||
}
|
||||
|
||||
/***************************************************************/
|
||||
/* */
|
||||
/* ParseQuotedString */
|
||||
|
||||
@@ -88,6 +88,7 @@ int JulianToGregorianOffset(int y, int m);
|
||||
int ParseChar (ParsePtr p, int *err, int peek);
|
||||
int ParseToken (ParsePtr p, DynamicBuffer *dbuf);
|
||||
int ParseQuotedString (ParsePtr p, DynamicBuffer *dbuf);
|
||||
int ParseTokenOrQuotedString (ParsePtr p, DynamicBuffer *dbuf);
|
||||
int ParseIdentifier (ParsePtr p, DynamicBuffer *dbuf);
|
||||
expr_node * ParseExpr(ParsePtr p, int *r);
|
||||
void print_expr_nodes_stats(void);
|
||||
|
||||
@@ -16232,6 +16232,11 @@ IF 1
|
||||
../tests/test.rem(1435): Can't open file: /non/existent/file/should/not/work/wookie
|
||||
ENDIF
|
||||
|
||||
do "with space.rem"
|
||||
REM MSG D'oh, a file whose name has spaces! [filename()]
|
||||
D'oh, a file whose name has spaces! ../tests/with space.rem
|
||||
|
||||
|
||||
DEBUG -e
|
||||
Var hash: total = 100141; maxlen = 5; avglen = 1.142
|
||||
Func hash: total = 100016; maxlen = 5; avglen = 1.140
|
||||
|
||||
@@ -1435,6 +1435,8 @@ IF 1
|
||||
INCLUDE /non/existent/file/should/not/work/wookie
|
||||
ENDIF
|
||||
|
||||
do "with space.rem"
|
||||
|
||||
DEBUG -e
|
||||
|
||||
# Output expression-node stats
|
||||
|
||||
1
tests/with space.rem
Normal file
1
tests/with space.rem
Normal file
@@ -0,0 +1 @@
|
||||
REM MSG D'oh, a file whose name has spaces! [filename()]
|
||||
Reference in New Issue
Block a user