X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=dict%2Flookgrep.c;h=d4e9873b3259fb28692d42da0c2f7c5403199a35;hb=a4e93d62564084d6d1b6670d4fe75dd70a6ed139;hp=5d8fe87038fa77af42f5f4366cff47ad15bc1ca2;hpb=3eb26862c3e82f9332c75c9c560f1044f80bc778;p=idzebra-moved-to-github.git diff --git a/dict/lookgrep.c b/dict/lookgrep.c index 5d8fe87..d4e9873 100644 --- a/dict/lookgrep.c +++ b/dict/lookgrep.c @@ -1,10 +1,33 @@ /* - * Copyright (C) 1994, Index Data I/S + * Copyright (C) 1994-1999, Index Data * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * * $Log: lookgrep.c,v $ - * Revision 1.16 1996-05-24 14:46:04 adam + * Revision 1.22 1999-02-02 14:50:23 adam + * Updated WIN32 code specific sections. Changed header. + * + * Revision 1.21 1998/06/24 12:16:12 adam + * Support for relations on text operands. Open range support in + * DFA module (i.e. [-j], [g-]). + * + * Revision 1.20 1997/10/27 14:33:03 adam + * Moved towards generic character mapping depending on "structure" + * field in abstract syntax file. Fixed a few memory leaks. Fixed + * bug with negative integers when doing searches with relational + * operators. + * + * Revision 1.19 1997/09/18 08:59:18 adam + * Extra generic handle for the character mapping routines. + * + * Revision 1.18 1997/09/05 15:29:58 adam + * Changed prototype for chr_map_input - added const. + * Added support for C++, headers uses extern "C" for public definitions. + * + * Revision 1.17 1996/06/04 10:20:06 adam + * Added support for character mapping. + * + * Revision 1.16 1996/05/24 14:46:04 adam * Added dict_grep_cmap function to define user-mapping in grep lookups. * * Revision 1.15 1996/03/20 09:35:18 adam @@ -403,7 +426,22 @@ int dict_lookup_grep (Dict dict, const char *pattern, int range, void *client, struct DFA *dfa = dfa_init(); int i, d; - logf (LOG_DEBUG, "dict_lookup_grep '%s' range=%d", pattern, range); +#if 0 + debug_dfa_trav = 1; + debug_dfa_tran = 1; + debug_dfa_followpos = 1; + dfa_verbose = 1; +#endif + + logf (LOG_DEBUG, "dict_lookup_grep range=%d", range); + for (i = 0; pattern[i]; i++) + { + logf (LOG_DEBUG, " %3d %c", pattern[i], + (pattern[i] > ' ' && pattern[i] < 127) ? pattern[i] : '?'); + } + + dfa_set_cmap (dfa, dict->grep_cmap_data, dict->grep_cmap); + i = dfa_parse (dfa, &this_pattern); if (i || *this_pattern) { @@ -445,7 +483,9 @@ int dict_lookup_grep (Dict dict, const char *pattern, int range, void *client, return i; } -void dict_grep_cmap (Dict dict, char **(*cmap)(const char **from)) +void dict_grep_cmap (Dict dict, void *vp, + const char **(*cmap)(void *vp, const char **from, int len)) { dict->grep_cmap = cmap; + dict->grep_cmap_data = vp; }