static void init_special_chars() { const char *p; for (p = "':^`~"; *p; p++) for (const char *q = "aeiouy"; *q; q++) { // Use a variable to work around bug in gcc 2.0 char c = cmupper(*q); init_two_char_letter(*p, *q, *p, c); } for (p = "/l/o~n,coeaeij"; *p; p += 2) { // Use variables to work around bug in gcc 2.0 char c0 = cmupper(p[0]); char c1 = cmupper(p[1]); init_two_char_letter(p[0], p[1], c0, c1); } init_two_char_letter('v', 's', 'v', 'S', "s"); init_two_char_letter('v', 'z', 'v', 'Z', "z"); init_two_char_letter('o', 'a', 'o', 'A', "a"); init_two_char_letter('T', 'p', 'T', 'P', THORN_SORT_KEY); init_two_char_letter('-', 'd', '-', 'D'); store_token("\\(ss", TOKEN_LOWER, 0, "SS"); store_token("\\[ss]", TOKEN_LOWER, 0, "SS"); store_token("\\(Sd", TOKEN_LOWER, "d", "\\(-D"); store_token("\\[Sd]", TOKEN_LOWER, "d", "\\[-D]"); store_token("\\(hy", TOKEN_HYPHEN); store_token("\\[hy]", TOKEN_HYPHEN); store_token("\\(en", TOKEN_RANGE_SEP); store_token("\\[en]", TOKEN_RANGE_SEP); }
static void init_ascii() { const char *p; for (p = "abcdefghijklmnopqrstuvwxyz"; *p; p++) { char buf[2]; buf[0] = *p; buf[1] = '\0'; store_token(strsave(buf), TOKEN_LOWER); buf[0] = cmupper(buf[0]); store_token(strsave(buf), TOKEN_UPPER); } for (p = "0123456789"; *p; p++) { char buf[2]; buf[0] = *p; buf[1] = '\0'; const char *s = strsave(buf); store_token(s, TOKEN_OTHER, s); } for (p = ".,:;?!"; *p; p++) { char buf[2]; buf[0] = *p; buf[1] = '\0'; store_token(strsave(buf), TOKEN_PUNCT); } store_token("-", TOKEN_HYPHEN); }
void token_info::upper_case(const char *start, const char *end, string &result) const { if (type != TOKEN_LOWER) { while (start < end) result += *start++; } else if (other_case) result += other_case; else { while (start < end) result += cmupper(*start++); } }
map_init::map_init() { int i; for (i = 0; i < 256; i++) map[i] = csalnum(i) ? cmlower(i) : '\0'; for (i = 0; i < 256; i++) { if (cslower(i)) { inv_map[i][0] = i; inv_map[i][1] = cmupper(i); inv_map[i][2] = '\0'; } else if (csdigit(i)) { inv_map[i][0] = i; inv_map[i][1] = 0; } else inv_map[i][0] = '\0'; } }