aboutsummaryrefslogtreecommitdiff
path: root/locale/programs
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-08-31 07:04:41 +0000
committerUlrich Drepper <drepper@redhat.com>1999-08-31 07:04:41 +0000
commit4b10dd6c1959577f57850ca427a94fe22b9f3299 (patch)
treeb385d9b27e5a40d5baf7cd7e27c7cc5ef7129b5b /locale/programs
parent1d1740d6b12894ed6a430e2e98bf73c5243b2925 (diff)
downloadglibc-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')
-rw-r--r--locale/programs/charmap-kw.gperf7
-rw-r--r--locale/programs/charmap-kw.h120
-rw-r--r--locale/programs/charmap.c284
-rw-r--r--locale/programs/charmap.h (renamed from locale/programs/charset.h)50
-rw-r--r--locale/programs/config.h30
-rw-r--r--locale/programs/ld-address.c514
-rw-r--r--locale/programs/ld-collate.c1819
-rw-r--r--locale/programs/ld-ctype.c3042
-rw-r--r--locale/programs/ld-identification.c376
-rw-r--r--locale/programs/ld-measurement.c206
-rw-r--r--locale/programs/ld-messages.c252
-rw-r--r--locale/programs/ld-monetary.c757
-rw-r--r--locale/programs/ld-name.c276
-rw-r--r--locale/programs/ld-numeric.c293
-rw-r--r--locale/programs/ld-paper.c235
-rw-r--r--locale/programs/ld-telephone.c283
-rw-r--r--locale/programs/ld-time.c1155
-rw-r--r--locale/programs/linereader.c452
-rw-r--r--locale/programs/linereader.h34
-rw-r--r--locale/programs/locale-spec.c2
-rw-r--r--locale/programs/locale.c8
-rw-r--r--locale/programs/localedef.c299
-rw-r--r--locale/programs/localedef.h131
-rw-r--r--locale/programs/locfile-kw.gperf250
-rw-r--r--locale/programs/locfile-kw.h482
-rw-r--r--locale/programs/locfile-token.h111
-rw-r--r--locale/programs/locfile.c1088
-rw-r--r--locale/programs/locfile.h264
-rw-r--r--locale/programs/repertoire.c225
-rw-r--r--locale/programs/repertoire.h31
-rw-r--r--locale/programs/simple-hash.h30
-rw-r--r--locale/programs/stringtrans.c10
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");