| /* C code produced by gperf version 2.5 (GNU C++ version) */ |
| /* Command-line: gperf -acCgopt -k1,2,5, keyword.gperf */ |
| /* `strncmp' is used for comparison. */ |
| #include <string.h> |
| |
| /* This file defines `enum token'. */ |
| #include "token.h" |
| struct locale_keyword { char *name; enum token token_id; }; |
| |
| #define TOTAL_KEYWORDS 68 |
| #define MIN_WORD_LENGTH 3 |
| #define MAX_WORD_LENGTH 17 |
| #define MIN_HASH_VALUE 4 |
| #define MAX_HASH_VALUE 140 |
| /* maximum key range = 137, duplicates = 0 */ |
| |
| #ifdef __GNUC__ |
| inline |
| #endif |
| static unsigned int |
| hash (register const char *str, register int len) |
| { |
| static const unsigned char asso_values[] = |
| { |
| 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, |
| 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, |
| 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, |
| 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, |
| 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, |
| 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, |
| 141, 141, 141, 141, 141, 141, 141, 0, 141, 65, |
| 5, 0, 141, 30, 141, 141, 0, 141, 0, 95, |
| 141, 141, 0, 141, 45, 10, 141, 141, 141, 141, |
| 141, 141, 141, 141, 141, 5, 141, 10, 85, 0, |
| 20, 0, 40, 35, 30, 10, 141, 0, 30, 15, |
| 15, 0, 0, 141, 55, 0, 0, 80, 141, 15, |
| 10, 0, 141, 141, 141, 141, 141, 141, |
| }; |
| register int hval = len; |
| |
| switch (hval) |
| { |
| default: |
| case 5: |
| hval += asso_values[str[4]]; |
| case 4: |
| case 3: |
| case 2: |
| hval += asso_values[str[1]]; |
| case 1: |
| hval += asso_values[str[0]]; |
| } |
| return hval; |
| } |
| |
| #ifdef __GNUC__ |
| inline |
| #endif |
| const struct locale_keyword * |
| in_word_set (register const char *str, register int len) |
| { |
| static const struct locale_keyword wordlist[] = |
| { |
| {"",}, {"",}, {"",}, {"",}, |
| {"copy", TOK_COPY}, |
| {"space", TOK_SPACE}, |
| {"yesstr", YESSTR}, |
| {"toupper", TOK_TOUPPER}, |
| {"position", TOK_POSITION}, |
| {"",}, |
| {"t_fmt", T_FMT}, |
| {"escape_char", TOK_ESCAPE_CHAR}, |
| {"comment_char", TOK_COMMENT_CHAR}, |
| {"positive_sign", POSITIVE_SIGN}, |
| {"",}, |
| {"t_fmt_ampm", T_FMT_AMPM}, |
| {"",}, |
| {"yesexpr", YESEXPR}, |
| {"mon", MON_1}, |
| {"p_sep_by_space", P_SEP_BY_SPACE}, |
| {"LC_NUMERIC", _NL_NUM_LC_NUMERIC}, |
| {"noexpr", NOEXPR}, |
| {"tolower", TOK_TOLOWER}, |
| {"p_cs_precedes", P_CS_PRECEDES}, |
| {"UNDEFINED", TOK_UNDEFINED}, |
| {"",}, |
| {"collating_symbol", TOK_COLLATING_SYMBOL}, |
| {"collating_element", TOK_COLLATING_ELEMENT}, |
| {"negative_sign", NEGATIVE_SIGN}, |
| {"",}, |
| {"d_fmt", D_FMT}, |
| {"",}, |
| {"mon_thousands_sep", MON_THOUSANDS_SEP}, |
| {"day", DAY_1}, |
| {"n_sep_by_space", N_SEP_BY_SPACE}, |
| {"digit", TOK_DIGIT}, |
| {"IGNORE", TOK_IGNORE}, |
| {"LC_TIME", _NL_NUM_LC_TIME}, |
| {"n_cs_precedes", N_CS_PRECEDES}, |
| {"",}, |
| {"int_curr_symbol", INT_CURR_SYMBOL}, |
| {"",}, {"",}, |
| {"thousands_sep", THOUSANDS_SEP}, |
| {"",}, |
| {"am_pm", AM_STR}, |
| {"xdigit", TOK_XDIGIT}, |
| {"",}, |
| {"decimal_point", DECIMAL_POINT}, |
| {"",}, |
| {"cntrl", TOK_CNTRL}, |
| {"p_sign_posn", P_SIGN_POSN}, |
| {"mon_decimal_point", MON_DECIMAL_POINT}, |
| {"LC_CTYPE", _NL_NUM_LC_CTYPE}, |
| {"",}, |
| {"alpha", TOK_ALPHA}, |
| {"",}, |
| {"forward", TOK_FORWARD}, |
| {"era", ERA}, |
| {"",}, |
| {"print", TOK_PRINT}, |
| {"",}, |
| {"mon_grouping", MON_GROUPING}, |
| {"era_year", ERA_YEAR}, |
| {"",}, {"",}, |
| {"n_sign_posn", N_SIGN_POSN}, |
| {"",}, |
| {"END", TOK_END}, |
| {"",}, |
| {"alt_digits", ALT_DIGITS}, |
| {"",}, |
| {"d_t_fmt", D_T_FMT}, |
| {"",}, {"",}, |
| {"nostr", NOSTR}, |
| {"LC_MESSAGES", _NL_NUM_LC_MESSAGES}, |
| {"",}, {"",}, {"",}, |
| {"int_frac_digits", INT_FRAC_DIGITS}, |
| {"",}, {"",}, {"",}, |
| {"era_d_fmt", ERA_D_FMT}, |
| {"punct", TOK_PUNCT}, |
| {"",}, {"",}, {"",}, {"",}, |
| {"lower", TOK_LOWER}, |
| {"",}, {"",}, {"",}, {"",}, |
| {"currency_symbol", CURRENCY_SYMBOL}, |
| {"",}, {"",}, |
| {"grouping", GROUPING}, |
| {"from", TOK_FROM}, |
| {"abday", ABDAY_1}, |
| {"",}, {"",}, {"",}, {"",}, |
| {"LC_COLLATE", _NL_NUM_LC_COLLATE}, |
| {"LC_MONETARY", _NL_NUM_LC_MONETARY}, |
| {"",}, {"",}, {"",}, {"",}, |
| {"frac_digits", FRAC_DIGITS}, |
| {"",}, {"",}, {"",}, |
| {"abmon", ABMON_1}, |
| {"",}, {"",}, |
| {"backward", TOK_BACKWARD}, |
| {"order_end", TOK_ORDER_END}, |
| {"blank", TOK_BLANK}, |
| {"order_start", TOK_ORDER_START}, |
| {"",}, {"",}, {"",}, |
| {"graph", TOK_GRAPH}, |
| {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, |
| {"",}, {"",}, {"",}, {"",}, {"",}, |
| {"upper", TOK_UPPER}, |
| }; |
| |
| if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) |
| { |
| register int key = hash (str, len); |
| |
| if (key <= MAX_HASH_VALUE && key >= 0) |
| { |
| register const char *s = wordlist[key].name; |
| |
| if (*s == *str && !strncmp (str + 1, s + 1, len - 1)) |
| return &wordlist[key]; |
| } |
| } |
| return 0; |
| } |