diff options
author | Roland McGrath <roland@gnu.org> | 1995-05-18 09:00:09 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1995-05-18 09:00:09 +0000 |
commit | 2b83a2a4d978012cdf78b648337c31091e20526d (patch) | |
tree | 6a5130b031f6815b6edbbb6e2b084c79ece15b1d /locale/keyword.h | |
parent | 4f6dc78a9237bb327a1d694635be9b0f50cc395e (diff) | |
download | glibc-2b83a2a4d978012cdf78b648337c31091e20526d.tar.gz glibc-2b83a2a4d978012cdf78b648337c31091e20526d.tar.xz glibc-2b83a2a4d978012cdf78b648337c31091e20526d.zip |
Wed May 17 16:50:21 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
Merged 1003.2 locale and localedef programs by Ulrich Drepper. * locale/charmap.c: New file. * locale/collate.c: New file. * locale/config.h: New file. * locale/ctype.c: New file. * locale/ctypedump.c: New file. * locale/hash.c: New file. * locale/hash.h: New file. * locale/iso-4217.def: New file. * locale/keyword.gperf: New file. * locale/keyword.h: New file. * locale/libintl.h: New file. * locale/locale.c: New file. * locale/localedef.c: New file. * locale/localedef.h: New file. * locale/locfile-lex.c: New file. * locale/locfile-parse.c: New file. * locale/messages.c: New file. * locale/monetary.c: New file. * locale/numeric.c: New file. * locale/token.h: New file. * posix/regex.c, posix/regex.h: New files, incorporated from GNU regex. * posix/Makefile (headers): Add regex.h. (routines): Add regex. (gpl2lgpl): Add regex.c and regex.h. Tue May 16 17:35:07 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu> * locale/loadlocale.c: Expect macro LOCALE_PATH to be defined, instead of hard-coding "/share/locale".
Diffstat (limited to 'locale/keyword.h')
-rw-r--r-- | locale/keyword.h | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/locale/keyword.h b/locale/keyword.h new file mode 100644 index 0000000000..1dc442aee5 --- /dev/null +++ b/locale/keyword.h @@ -0,0 +1,180 @@ +/* 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; +} |