X-Git-Url: https://git.distorted.org.uk/~mdw/fwd/blobdiff_plain/96bc31bae41f60c681f8a1b9ccf689d2a7eadfc4..e73034b0d2191f00a8b00f38383843ea8858c576:/conf.c diff --git a/conf.c b/conf.c index 020df7a..73b611f 100644 --- a/conf.c +++ b/conf.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: conf.c,v 1.2 1999/07/26 23:28:39 mdw Exp $ + * $Id: conf.c,v 1.3 1999/08/19 18:32:48 mdw Exp $ * * Configuration parsing * @@ -29,6 +29,10 @@ /*----- Revision history --------------------------------------------------* * * $Log: conf.c,v $ + * Revision 1.3 1999/08/19 18:32:48 mdw + * Improve lexical analysis. In particular, `chmod' patterns don't have to + * be quoted any more. + * * Revision 1.2 1999/07/26 23:28:39 mdw * Major reconstruction work for new design. * @@ -66,8 +70,24 @@ static source_ops *sources[] = { &xsource_ops, &fsource_ops, &ssource_ops }; static target_ops *targets[] = { &xtarget_ops, &ftarget_ops, &starget_ops }; +static const char *notword = 0; +static const char *notdelim = 0; + /*----- Main code ---------------------------------------------------------*/ +/* --- @undelim@ --- * + * + * Arguments: @const char *d, dd@ = pointer to characters to escape + * + * Returns: --- + * + * Use: Modifies the tokenizer. Characters in the first list will + * always be considered to begin a word. Characters in the + * second list will always be allowed to continue a word. + */ + +void undelim(const char *d, const char *dd) { notword = d; notdelim = dd; } + /* --- @token@ --- * * * Arguments: @scanner *sc@ = pointer to scanner definition @@ -122,10 +142,12 @@ int token(scanner *sc) /* --- Various self-delimiting characters --- */ case SELFDELIM: - dstr_putc(&sc->d, ch); - dstr_putz(&sc->d); - sc->t = ch; - goto done; + if (!notword || strchr(notword, ch) == 0) { + dstr_putc(&sc->d, ch); + dstr_putz(&sc->d); + sc->t = ch; + goto done; + } /* --- Bare words --- * * @@ -150,7 +172,7 @@ int token(scanner *sc) q = !q; break; case SELFDELIM: - if (q) + if (q || (notdelim && strchr(notdelim, ch))) goto insert; goto word; default: