X-Git-Url: https://git.distorted.org.uk/~mdw/anag/blobdiff_plain/a10122de085ddf5c8bec6fc12c7164ad1dc1459c..345f33ea7a273e3196075b07fcc0bc28714793a5:/anag.c diff --git a/anag.c b/anag.c index 6be2a4e..616461c 100644 --- a/anag.c +++ b/anag.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: anag.c,v 1.5 2002/08/11 12:58:09 mdw Exp $ + * $Id: anag.c,v 1.8 2004/04/08 01:36:19 mdw Exp $ * * Main driver for anag * @@ -26,28 +26,6 @@ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: anag.c,v $ - * Revision 1.5 2002/08/11 12:58:09 mdw - * Added support for regular expression matching, if supported by the C - * library. - * - * Revision 1.4 2001/02/19 19:18:50 mdw - * Minor big fixes to parser. - * - * Revision 1.3 2001/02/16 21:45:19 mdw - * Be more helpful. Improve full help message. Special-case error for - * empty command strings. - * - * Revision 1.2 2001/02/07 09:09:11 mdw - * Fix spurious error when `-file' is used. - * - * Revision 1.1 2001/02/04 17:14:42 mdw - * Initial checkin - * - */ - /*----- Header files ------------------------------------------------------*/ #include "anag.h" @@ -89,18 +67,24 @@ The basic tests in the expression are:\n\ -subgram WORD matches words which only use letters in WORD\n\ -wildcard PATTERN matches with wildcards `*' and `?'\n\ -trackword WORD matches words which can be found in a trackword\n\ +-mono PATTERN matches words isomorphic to the given PATTERN\n\ " #ifdef HAVE_REGCOMP "\ -regexp REGEXP matches with an (extended) regular expression\n\ " #endif +#ifdef HAVE_PCRE +"\ +-pcre REGEXP matches with a Perl-like regular expression\n\ +" +#endif "\ \n\ These simple tests can be combined using the operators `-a', `-o' and `-n'\n\ (for `and', `or' and `not'; they may also be written `&', `|' and `!' if\n\ you like), and grouped using parentheses `(' and `)'.\n\ -", fp); +", fp); /*"*/ } /*----- The options parser ------------------------------------------------*/ @@ -118,7 +102,7 @@ enum { O_HELP, O_VERSION, O_USAGE, O_FILE, O_AND, O_OR, O_NOT, O_LPAREN, O_RPAREN, - O_ANAG, O_SUBG, O_WILD, O_TRACK, O_REGEXP, + O_ANAG, O_SUBG, O_WILD, O_TRACK, O_REGEXP, O_PCRE, O_MONO, O_EOF }; @@ -148,9 +132,13 @@ static const struct opt opttab[] = { { "subgram", 1, 0, O_SUBG }, { "wildcard", 1, 0, O_WILD }, { "trackword", 1, 0, O_TRACK }, + { "mono", 1, 0, O_MONO }, #ifdef HAVE_REGCOMP { "regexp", 1, 0, O_REGEXP }, #endif +#ifdef HAVE_PCRE + { "pcre", 1, 0, O_PCRE }, +#endif /* --- End marker --- */ @@ -354,6 +342,10 @@ static void p_factor(p_ctx *p, node **nn) #ifdef HAVE_REGCOMP case O_REGEXP: *nn = regexp(p->a + 1); break; #endif +#ifdef HAVE_PCRE + case O_PCRE: *nn = pcrenode(p->a + 1); break; +#endif + case O_MONO: *nn = mono(p->a + 1); break; default: die("syntax error near `%s': unexpected token", *p->a); } p_next(p);