Updated WIN32 code specific sections. Changed header.
[idzebra-moved-to-github.git] / dfa / dfa.c
index 5da189a..73730c8 100644 (file)
--- a/dfa/dfa.c
+++ b/dfa/dfa.c
@@ -1,10 +1,26 @@
 /*
- * Copyright (C) 1994-1998, Index Data I/S 
+ * Copyright (C) 1994-1999, Index Data
  * All rights reserved.
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: dfa.c,v $
- * Revision 1.20  1998-06-08 14:40:44  adam
+ * Revision 1.25  1999-02-02 14:50:05  adam
+ * Updated WIN32 code specific sections. Changed header.
+ *
+ * Revision 1.24  1998/10/28 10:48:55  adam
+ * Added type cast to prevent warning.
+ *
+ * Revision 1.23  1998/09/02 14:15:28  adam
+ * Zebra uses GNU Configure.
+ *
+ * Revision 1.22  1998/06/24 12:16:10  adam
+ * Support for relations on text operands. Open range support in
+ * DFA module (i.e. [-j], [g-]).
+ *
+ * Revision 1.21  1998/06/22 11:33:39  adam
+ * Added two type casts.
+ *
+ * Revision 1.20  1998/06/08 14:40:44  adam
  * Fixed problem with signed character(s) in regular expressions.
  *
  * Revision 1.19  1998/01/12 14:39:39  adam
@@ -420,18 +436,28 @@ static int read_charset (struct DFA_parse *parse_info)
     {
         if (!esc0 && ch0 == ']')
             break;
-        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);
+       if (!esc0 && ch0 == '-')
+       {
+           ch1 = ch0;
+           esc1 = esc0;
+           ch0 = 1;
+           add_BSet (parse_info->charset, parse_info->look_chars, ch0);
+       }
+       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);
+       }
         if (!esc1 && ch1 == '-')
         {
             int open_range = 0;
@@ -487,7 +513,7 @@ static int map_l_char (struct DFA_parse *parse_info)
     if (cp0[0] == 1 && cp0[1])
     {
         parse_info->expr_ptr++;
-        parse_info->look_ch = cp0[1] & 255;
+        parse_info->look_ch = ((unsigned char *) cp0)[1];
         return L_CHAR;
     }
     if (!parse_info->cmap)
@@ -497,7 +523,7 @@ static int map_l_char (struct DFA_parse *parse_info)
     assert (mapto);
     
     parse_info->expr_ptr = (const unsigned char *) cp0;
-    parse_info->look_ch = mapto[i][0] & 255;
+    parse_info->look_ch = ((unsigned char **) mapto)[i][0];
     logf (LOG_DEBUG, "map from %c to %d", parse_info->expr_ptr[-1], parse_info->look_ch);
     return L_CHAR;
 }
@@ -520,7 +546,7 @@ static int lex_sub(struct DFA_parse *parse_info)
         {
             const int *cc;
             for (cc = parse_info->charMap; *cc; cc += 2)
-                if (*cc == parse_info->look_ch)
+                if (*cc == (int) (parse_info->look_ch))
                 {
                     if (!cc[1])
                         --parse_info->expr_ptr;
@@ -756,6 +782,7 @@ static void dfa_trav (struct DFA_parse *parse_info, struct Tnode *n)
         n->lastpos = mk_Set (poset);
         n->lastpos = add_Set (poset, n->lastpos, n->pos);
         if (debug_dfa_trav)
+       {
             if (n->u.ch[0] < 0)
                 printf ("#%d (n#%d)", -n->u.ch[0], -n->u.ch[1]);
             else if (n->u.ch[1] > n->u.ch[0])
@@ -769,6 +796,7 @@ static void dfa_trav (struct DFA_parse *parse_info, struct Tnode *n)
             }
             else
                 out_char (n->u.ch[0]);
+       }
     }
     if (debug_dfa_trav)
     {
@@ -839,10 +867,12 @@ static void mk_dfa_tran (struct DFA_parse *parse_info, struct DFA_states *dfas)
             for (pos_i = pos; (i = *pos_i) != -1; ++pos_i)
                 if (posar[i]->u.ch[1] >= char_1 
                     && (c=posar[i]->u.ch[0]) < char_0)
+               {
                     if (c < char_1)
                         char_0 = char_1;
                     else
                         char_0 = c;
+               }
 
             if (char_0 > max_char)
                 break;