X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=dfa%2Fdfa.c;h=8450d2ad885996a15e6472aab6eb04bebdad8282;hb=c51d8a82aae537ffa1ad29aecea5cb6e7a9be37a;hp=60c5e997e96a6ee85f32875869b48a1fb6c8d8ff;hpb=396e9aaedfbed7534e329b42475cd7abe2fd3814;p=idzebra-moved-to-github.git diff --git a/dfa/dfa.c b/dfa/dfa.c index 60c5e99..8450d2a 100644 --- a/dfa/dfa.c +++ b/dfa/dfa.c @@ -1,5 +1,5 @@ -/* $Id: dfa.c,v 1.38 2006-09-28 18:38:45 adam Exp $ - Copyright (C) 1995-2006 +/* $Id: dfa.c,v 1.40 2007-01-15 15:10:15 adam Exp $ + Copyright (C) 1995-2007 Index Data ApS This file is part of the Zebra server. @@ -32,8 +32,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "dfap.h" #include "imalloc.h" -#define DFA_OPEN_RANGE 1 - #define CAT 16000 #define OR 16001 #define STAR 16002 @@ -357,7 +355,7 @@ static int nextchar_set (struct DFA_parse *parse_info, int *esc) static int read_charset (struct DFA_parse *parse_info) { - int i, ch0, ch1, esc0, esc1, cc = 0; + int i, ch0, esc0, cc = 0; parse_info->look_chars = mk_BSet (&parse_info->charset); res_BSet (parse_info->charset, parse_info->look_chars); @@ -367,8 +365,13 @@ static int read_charset (struct DFA_parse *parse_info) cc = 1; ch0 = nextchar_set (parse_info, &esc0); } + /** + ch0 is last met character + ch1 is "next" char + */ while (ch0 != 0) { + int ch1, esc1; if (!esc0 && ch0 == ']') break; if (!esc0 && ch0 == '-') @@ -380,16 +383,23 @@ static int read_charset (struct DFA_parse *parse_info) } else { - if (parse_info->cmap) - { - const char **mapto; - char mapfrom[2]; - const char *mcp = mapfrom; - mapfrom[0] = ch0; - mapto = (*parse_info->cmap)(parse_info->cmap_data, &mcp, 1); - assert (mapto); - ch0 = mapto[0][0]; - } + if (ch0 == 1) + { + ch0 = nextchar(parse_info, &esc0); + } + else + { + if (parse_info->cmap) + { + const char **mapto; + char mapfrom[2]; + const char *mcp = mapfrom; + mapfrom[0] = ch0; + mapto = parse_info->cmap(parse_info->cmap_data, &mcp, 1); + assert (mapto); + ch0 = mapto[0][0]; + } + } add_BSet (parse_info->charset, parse_info->look_chars, ch0); ch1 = nextchar_set (parse_info, &esc1); } @@ -398,20 +408,16 @@ static int read_charset (struct DFA_parse *parse_info) int open_range = 0; if ((ch1 = nextchar_set (parse_info, &esc1)) == 0) break; -#if DFA_OPEN_RANGE if (!esc1 && ch1 == ']') { ch1 = 255; open_range = 1; } -#else - if (!esc1 && ch1 == ']') + else if (ch1 == 1) { - add_BSet (parse_info->charset, parse_info->look_chars, '-'); - break; + ch1 = nextchar(parse_info, &esc1); } -#endif - if (!open_range && parse_info->cmap) + else if (parse_info->cmap) { const char **mapto; char mapfrom[2]; @@ -421,12 +427,12 @@ static int read_charset (struct DFA_parse *parse_info) assert (mapto); ch1 = mapto[0][0]; } - for (i=ch0; ++i<=ch1;) + for (i = ch0; ++i <= ch1;) add_BSet (parse_info->charset, parse_info->look_chars, i); - if (!open_range) - ch0 = nextchar_set (parse_info, &esc0); - else + + if (open_range) break; + ch0 = nextchar_set (parse_info, &esc0); } else {