diff options
| author | Ulrich Drepper <drepper@redhat.com> | 1999-08-31 07:04:41 +0000 |
|---|---|---|
| committer | Ulrich Drepper <drepper@redhat.com> | 1999-08-31 07:04:41 +0000 |
| commit | 4b10dd6c1959577f57850ca427a94fe22b9f3299 (patch) | |
| tree | b385d9b27e5a40d5baf7cd7e27c7cc5ef7129b5b /locale/programs | |
| parent | 1d1740d6b12894ed6a430e2e98bf73c5243b2925 (diff) | |
| download | glibc-4b10dd6c1959577f57850ca427a94fe22b9f3299.tar.xz glibc-4b10dd6c1959577f57850ca427a94fe22b9f3299.zip | |
Update.
* locale/Makefile (distribute): Add iso-639.def and iso-3166.def.
Change charset.h to charmap.h.
(categories): Add new categories. Leave out collate for now.
Update build rules.
* locale/categories.def: Add definitions for new categories.
* locale/langinfo.h: Likewise.
* locale/locale.h: Likewise.
* locale/C-address.c: New file.
* locale/C-identification.c: New file.
* locale/C-measurement.c: New file.
* locale/C-name.c: New file.
* locale/C-paper.c: New file.
* locale/C-telephone.c: New file.
* locale/lc-address.c: Likewise.
* locale/lc-identification.c: Likewise.
* locale/lc-measurement.c: Likewise.
* locale/lc-name.c: Likewise.
* locale/lc-paper.c: Likewise.
* locale/lc-telephone.c: Likewise.
* locale/C-ctype.c: Update for locale rewrite.
* locale/C-messages.c: Likewise.
* locale/C-monetary.c: Likewise.
* locale/C-time.c: Likewise.
* locale/lc-collate.c: Likewise.
* locale/lc-ctype.c: Likewise.
* locale/lc-monetary.c: Likewise.
* locale/lc-time.c: Likewise.
* locale/localeinfo.h: Likewise.
* locale/newlocale.c: Likewise.
* locale/setlocale.c: Likewise.
* locale/weight.h: Likewise.
* locale/findlocale.c: Unconditionally use mmap.
Handle new categories.
* locale/loadlocale.c: Likewise.
* locale/iso-3166.def: New file.
* locale/iso-639.def: New file.
* locale/programs/charmap-kw.gperf: Add new keywords.
* locale/programs/locfile-kw.gperf: Likewise.
* locale/programs/locfile-token.h: Define new tokens.
* locale/programs/charmap.c: Rewrite to handle multibyte charsets.
* locale/programs/charmap.h: New file.
* locale/programs/charset.h: Removed.
* locale/programs/config.h: Add __LC_LAST.
* locale/programs/lc-address.c: New file.
* locale/programs/lc-identification.c: New file.
* locale/programs/lc-measurement.c: New file.
* locale/programs/lc-name.c: New file.
* locale/programs/lc-paper.c: New file.
* locale/programs/lc-telephone.c: New file.
* locale/programs/lc-collate.c: Update for locale rewrite.
* locale/programs/lc-ctype.c: Likewise.
* locale/programs/lc-messages.c: Likewise.
* locale/programs/lc-monetary.c: Likewise.
* locale/programs/lc-numeric.c: Likewise.
* locale/programs/lc-time.c: Likewise.
* locale/programs/locale.c: Likewise.
* locale/programs/localedef.c: Likewise.
* locale/programs/locfile.c: Likewise.
* locale/programs/repertoire.c: Likewise.
* locale/programs/repertoire.h: Likewise.
* locale/programs/locfile.c: Update prototypes.
Update handle_copy definition.
* locale/programs/linereader.c: Add handling of wide char strings and
new definition file syntax.
* locale/programs/linereader.h (struct token): Add elements for wide
character strings.
* locale/programs/locale-spec.c: Disable handling of collation
elements for now.
* locale/programs/simple-hash.h: Cleanup.
* locale/programs/stringtrans.h: Handle quite of end of line.
* string/strcoll.c: Fall back on strcmp for now.
* string/strxfrm.c: Fall back on strncpy/strlen for now.
* time/strftime.c: Use new wide character data for wcsftime.
* time/strptime.c: Remove _nl_C_LC_TIME declaration.
* wctype/cname-lookup.h: Update for new LC_CTYPE data.
Diffstat (limited to 'locale/programs')
32 files changed, 9880 insertions, 3236 deletions
diff --git a/locale/programs/charmap-kw.gperf b/locale/programs/charmap-kw.gperf index 1fb9c38b04..34241041a6 100644 --- a/locale/programs/charmap-kw.gperf +++ b/locale/programs/charmap-kw.gperf @@ -1,7 +1,7 @@ %{ -/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. - Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>. + Contributed by Ulrich Drepper, <drepper@gnu.org>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -33,6 +33,9 @@ g0esc, tok_g0esc, 1 g1esc, tok_g1esc, 1 g2esc, tok_g2esc, 1 g3esc, tok_g3esc, 1 +escseq, tok_escseq, 1 +addset, tok_addset, 1 +include, tok_include, 1 CHARMAP, tok_charmap, 0 END, tok_end, 0 WIDTH, tok_width, 0 diff --git a/locale/programs/charmap-kw.h b/locale/programs/charmap-kw.h index 3bfcd14612..4b402165ef 100644 --- a/locale/programs/charmap-kw.h +++ b/locale/programs/charmap-kw.h @@ -1,8 +1,8 @@ -/* C code produced by gperf version 2.5 (GNU C++ version) */ -/* Command-line: gperf -acCgopt -k1,2,5,$ -N charmap_hash programs/charmap-kw.gperf */ -/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +/* ANSI-C code produced by gperf version 2.7.1 (19981006 egcs) */ +/* Command-line: gperf -acCgopt -k1,2,5,9,$ -L ANSI-C -N charmap_hash programs/charmap-kw.gperf */ +/* Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. - Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>. + Contributed by Ulrich Drepper, <drepper@gnu.org>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -24,81 +24,103 @@ #include "locfile-token.h" struct keyword_t ; -#define TOTAL_KEYWORDS 14 +#define TOTAL_KEYWORDS 17 #define MIN_WORD_LENGTH 3 #define MAX_WORD_LENGTH 14 #define MIN_HASH_VALUE 3 -#define MAX_HASH_VALUE 25 -/* maximum key range = 23, duplicates = 0 */ +#define MAX_HASH_VALUE 35 +/* maximum key range = 33, duplicates = 0 */ #ifdef __GNUC__ -inline +__inline #endif static unsigned int -hash (register const char *str, register int len) +hash (register const char *str, register unsigned int len) { static const unsigned char asso_values[] = { - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 14, 10, - 15, 4, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, - 26, 26, 0, 0, 26, 26, 26, 0, 0, 26, - 0, 26, 26, 26, 5, 26, 26, 0, 26, 26, - 26, 26, 26, 26, 26, 0, 26, 26, 0, 0, - 26, 0, 26, 0, 26, 26, 26, 26, 26, 0, - 15, 0, 0, 26, 0, 0, 26, 0, 26, 26, - 0, 26, 26, 26, 26, 26, 26, 26, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 25, 10, + 15, 20, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 10, 0, 0, + 5, 36, 0, 0, 36, 36, 36, 0, 0, 36, + 0, 36, 0, 36, 0, 36, 36, 0, 36, 36, + 36, 36, 36, 36, 36, 0, 36, 0, 0, 0, + 10, 0, 36, 0, 0, 0, 36, 36, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, + 25, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36 }; register int hval = len; switch (hval) { default: + case 9: + hval += asso_values[(unsigned char)str[8]]; + case 8: + case 7: + case 6: case 5: - hval += asso_values[str[4]]; + hval += asso_values[(unsigned char)str[4]]; case 4: case 3: case 2: - hval += asso_values[str[1]]; + hval += asso_values[(unsigned char)str[1]]; case 1: - hval += asso_values[str[0]]; + hval += asso_values[(unsigned char)str[0]]; break; } - return hval + asso_values[str[len - 1]]; + return hval + asso_values[(unsigned char)str[len - 1]]; } #ifdef __GNUC__ -inline +__inline #endif const struct keyword_t * -charmap_hash (register const char *str, register int len) +charmap_hash (register const char *str, register unsigned int len) { static const struct keyword_t wordlist[] = { - {"",}, {"",}, {"",}, - {"END", tok_end, 0}, - {"",}, - {"WIDTH", tok_width, 0}, - {"",}, - {"CHARMAP", tok_charmap, 0}, - {"",}, - {"g3esc", tok_g3esc, 1}, - {"mb_cur_max", tok_mb_cur_max, 1}, - {"escape_char", tok_escape_char, 1}, - {"comment_char", tok_comment_char, 1}, - {"code_set_name", tok_code_set_name, 1}, - {"WIDTH_VARIABLE", tok_width_variable, 0}, - {"g1esc", tok_g1esc, 1}, - {"",}, {"",}, - {"WIDTH_DEFAULT", tok_width_default, 0}, - {"g0esc", tok_g0esc, 1}, - {"g2esc", tok_g2esc, 1}, - {"",}, {"",}, {"",}, {"",}, - {"mb_cur_min", tok_mb_cur_min, 1}, + {""}, {""}, {""}, + {"END", tok_end, 0}, + {""}, + {"WIDTH", tok_width, 0}, + {"escseq", tok_escseq, 1}, + {"include", tok_include, 1}, + {""}, {""}, + {"mb_cur_min", tok_mb_cur_min, 1}, + {"escape_char", tok_escape_char, 1}, + {"comment_char", tok_comment_char, 1}, + {"code_set_name", tok_code_set_name, 1}, + {"WIDTH_VARIABLE", tok_width_variable, 0}, + {"g1esc", tok_g1esc, 1}, + {"addset", tok_addset, 1}, + {"CHARMAP", tok_charmap, 0}, + {"WIDTH_DEFAULT", tok_width_default, 0}, + {""}, + {"g2esc", tok_g2esc, 1}, + {""}, {""}, {""}, {""}, + {"g3esc", tok_g3esc, 1}, + {""}, {""}, {""}, {""}, + {"g0esc", tok_g0esc, 1}, + {""}, {""}, {""}, {""}, + {"mb_cur_max", tok_mb_cur_max, 1} }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) @@ -109,7 +131,7 @@ charmap_hash (register const char *str, register int len) { register const char *s = wordlist[key].name; - if (*s == *str && !strncmp (str + 1, s + 1, len - 1)) + if (*str == *s && !strncmp (str + 1, s + 1, len - 1)) return &wordlist[key]; } } diff --git a/locale/programs/charmap.c b/locale/programs/charmap.c index fd9cc357e3..6db2b420a6 100644 --- a/locale/programs/charmap.c +++ b/locale/programs/charmap.c @@ -1,6 +1,6 @@ -/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996. + Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -25,6 +25,7 @@ #include <dirent.h> #include <errno.h> #include <libintl.h> +#include <limits.h> #include <obstack.h> #include <stdlib.h> #include <string.h> @@ -32,13 +33,10 @@ #include "error.h" #include "linereader.h" -#include "charset.h" +#include "charmap.h" #include "locfile.h" #include "repertoire.h" - -/* Uncomment following line for production version. */ -/* define NDEBUG 1 */ #include <assert.h> @@ -49,17 +47,20 @@ extern void *xmalloc (size_t __n); /* Prototypes for local functions. */ -static struct charset_t *parse_charmap (const char *filename); -static void new_width (struct linereader *cmfile, struct charset_t *result, +static struct charmap_t *parse_charmap (const char *filename); +static void new_width (struct linereader *cmfile, struct charmap_t *result, const char *from, const char *to, unsigned long int width); +static void charmap_new_char (struct linereader *lr, struct charmap_t *cm, + int nbytes, char *bytes, const char *from, + const char *to, int decimal_ellipsis); -struct charset_t * +struct charmap_t * charmap_read (const char *filename) { const char *pathnfile; - struct charset_t *result = NULL; + struct charmap_t *result = NULL; if (filename != NULL) { @@ -175,16 +176,17 @@ charmap_read (const char *filename) } -static struct charset_t * +static struct charmap_t * parse_charmap (const char *filename) { struct linereader *cmfile; - struct charset_t *result; + struct charmap_t *result; int state; enum token_t expected_tok = tok_error; const char *expected_str = NULL; char *from_name = NULL; char *to_name = NULL; + enum token_t ellipsis = 0; /* Determine path. */ cmfile = lr_open (filename, charmap_hash); @@ -206,9 +208,12 @@ parse_charmap (const char *filename) return NULL; } + /* We don't want symbolic names in string to be translated. */ + cmfile->translate_strings = 0; + /* Allocate room for result. */ - result = (struct charset_t *) xmalloc (sizeof (struct charset_t)); - memset (result, '\0', sizeof (struct charset_t)); + result = (struct charmap_t *) xmalloc (sizeof (struct charmap_t)); + memset (result, '\0', sizeof (struct charmap_t)); /* The default DEFAULT_WIDTH is 1. */ result->width_default = 1; @@ -216,7 +221,8 @@ parse_charmap (const char *filename) #define obstack_chunk_free free obstack_init (&result->mem_pool); - if (init_hash (&result->char_table, 256)) + if (init_hash (&result->char_table, 256) + || init_hash (&result->byte_table, 256)) { free (result); return NULL; @@ -228,7 +234,7 @@ parse_charmap (const char *filename) while (1) { /* What's on? */ - struct token *now = lr_token (cmfile, NULL); + struct token *now = lr_token (cmfile, NULL, NULL); enum token_t nowtok = now->tok; struct token *arg; @@ -275,22 +281,24 @@ parse_charmap (const char *filename) && nowtok != tok_mb_cur_min && nowtok != tok_escape_char && nowtok != tok_comment_char && nowtok != tok_g0esc && nowtok != tok_g1esc && nowtok != tok_g2esc - && nowtok != tok_g3esc) + && nowtok != tok_g3esc && nowtok != tok_repertoiremap + && nowtok != tok_include) { lr_error (cmfile, _("syntax error in prolog: %s"), - _("illegal definition")); + _("invalid definition")); lr_ignore_rest (cmfile, 0); continue; } /* We know that we need an argument. */ - arg = lr_token (cmfile, NULL); + arg = lr_token (cmfile, NULL, NULL); switch (nowtok) { case tok_code_set_name: - if (arg->tok != tok_ident && arg->tok != tok_string) + case tok_repertoiremap: + if (arg->tok != tok_ident) { badarg: lr_error (cmfile, _("syntax error in prolog: %s"), @@ -300,9 +308,14 @@ parse_charmap (const char *filename) continue; } - result->code_set_name = obstack_copy0 (&result->mem_pool, - arg->val.str.start, - arg->val.str.len); + if (nowtok == tok_code_set_name) + result->code_set_name = obstack_copy0 (&result->mem_pool, + arg->val.str.startmb, + arg->val.str.lenmb); + else + result->repertoiremap = obstack_copy0 (&result->mem_pool, + arg->val.str.startmb, + arg->val.str.lenmb); lr_ignore_rest (cmfile, 1); continue; @@ -312,12 +325,21 @@ parse_charmap (const char *filename) if (arg->tok != tok_number) goto badarg; - if (arg->val.num < 1 || arg->val.num > 4) + if (verbose + && ((nowtok == tok_mb_cur_max + && result->mb_cur_max != 0) + || (nowtok == tok_mb_cur_max + && result->mb_cur_max != 0))) + lr_error (cmfile, _("duplicate definition of <%s>"), + nowtok == tok_mb_cur_min + ? "mb_cur_min" : "mb_cur_max"); + + if (arg->val.num < 1) { lr_error (cmfile, - _("value for <%s> must lie between 1 and 4"), - nowtok == tok_mb_cur_min ? "mb_cur_min" - : "mb_cur_max"); + _("value for <%s> must be 1 or greater"), + nowtok == tok_mb_cur_min + ? "mb_cur_min" : "mb_cur_max"); |
