-/* $Id: rpnsearch.c,v 1.13 2007-05-14 12:33:33 adam Exp $
+/* $Id: rpnsearch.c,v 1.14 2007-05-14 14:05:21 adam Exp $
Copyright (C) 1995-2007
Index Data ApS
#define REGEX_CHARS " []()|.*+?!"
+static void add_non_space(const char *start, const char *end,
+ WRBUF term_dict,
+ char *dst_term, int *dst_ptr,
+ const char **map, int q_map_match)
+{
+ size_t sz = end - start;
+ memcpy(dst_term + *dst_ptr, start, sz);
+ (*dst_ptr) += sz;
+ if (!q_map_match)
+ {
+ while (start < end)
+ {
+ if (strchr(REGEX_CHARS, *start))
+ wrbuf_putc(term_dict, '\\');
+ wrbuf_putc(term_dict, *start);
+ start++;
+ }
+ }
+ else
+ {
+ char tmpbuf[80];
+ esc_str(tmpbuf, sizeof(tmpbuf), map[0], strlen(map[0]));
+
+ wrbuf_puts(term_dict, map[0]);
+ }
+}
+
/* term_100: handle term, where trunc = none(no operators at all) */
static int term_100(ZebraMaps zebra_maps, int reg_type,
const char **src, WRBUF term_dict, int space_split,
space_start = space_end = 0;
}
}
- /* add non-space char */
i++;
- memcpy(dst_term+j, s1, s0 - s1);
- j += (s0 - s1);
- if (!q_map_match)
- {
- while (s1 < s0)
- {
- if (strchr(REGEX_CHARS, *s1))
- wrbuf_putc(term_dict, '\\');
- wrbuf_putc(term_dict, *s1);
- s1++;
- }
- }
- else
- {
- char tmpbuf[80];
- esc_str(tmpbuf, sizeof(tmpbuf), map[0], strlen(map[0]));
- wrbuf_puts(term_dict, map[0]);
- }
+ add_non_space(s1, s0, term_dict, dst_term, &j,
+ map, q_map_match);
}
dst_term[j] = '\0';
*src = s0;
break;
i++;
- /* add non-space char */
- memcpy(dst_term+j, s1, s0 - s1);
- j += (s0 - s1);
- if (!q_map_match)
- {
- while (s1 < s0)
- {
- if (strchr(REGEX_CHARS, *s1))
- wrbuf_putc(term_dict, '\\');
- wrbuf_putc(term_dict, *s1);
- s1++;
- }
- }
- else
- {
- char tmpbuf[80];
- esc_str(tmpbuf, sizeof(tmpbuf), map[0], strlen(map[0]));
-
- wrbuf_puts(term_dict, map[0]);
- }
+ add_non_space(s1, s0, term_dict, dst_term, &j,
+ map, q_map_match);
}
}
dst_term[j++] = '\0';
if (space_split && **map == *CHR_SPACE)
break;
- /* add non-space char */
- memcpy(dst_term+j, s1, s0 - s1);
- j += (s0 - s1);
i++;
- if (!q_map_match)
- {
- while (s1 < s0)
- {
- if (strchr(REGEX_CHARS, *s1))
- wrbuf_putc(term_dict, '\\');
- wrbuf_putc(term_dict, *s1);
- s1++;
- }
- }
- else
- {
- char tmpbuf[80];
- esc_str(tmpbuf, sizeof(tmpbuf), map[0], strlen(map[0]));
-
- wrbuf_puts(term_dict, map[0]);
- }
+ add_non_space(s1, s0, term_dict, dst_term, &j,
+ map, q_map_match);
}
}
dst_term[j] = '\0';
break;
i++;
- /* add non-space char */
- memcpy(dst_term+j, s1, s0 - s1);
- j += (s0 - s1);
- if (!q_map_match)
- {
- while (s1 < s0)
- {
- if (strchr(REGEX_CHARS, *s1))
- wrbuf_putc(term_dict, '\\');
- wrbuf_putc(term_dict, *s1);
- s1++;
- }
- }
- else
- {
- char tmpbuf[80];
- esc_str(tmpbuf, sizeof(tmpbuf), map[0], strlen(map[0]));
-
- wrbuf_puts(term_dict, map[0]);
- }
+ add_non_space(s1, s0, term_dict, dst_term, &j,
+ map, q_map_match);
}
}
dst_term[j++] = '\0';
break;
i++;
- /* add non-space char */
- memcpy(dst_term+j, s1, s0 - s1);
- j += (s0 - s1);
- if (!q_map_match)
- {
- while (s1 < s0)
- {
- if (strchr(REGEX_CHARS, *s1))
- wrbuf_putc(term_dict, '\\');
- wrbuf_putc(term_dict, *s1);
- s1++;
- }
- }
- else
- {
- char tmpbuf[80];
- esc_str(tmpbuf, sizeof(tmpbuf), map[0], strlen(map[0]));
-
- wrbuf_puts(term_dict, map[0]);
- }
+ add_non_space(s1, s0, term_dict, dst_term, &j,
+ map, q_map_match);
}
}
if (right_truncate)