Starting fixing character set handling to handle multi-byte encodings.
[kopensolaris-gnu/glibc.git] / locale / programs / charset.h
1 /* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Library General Public License as
7    published by the Free Software Foundation; either version 2 of the
8    License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Library General Public License for more details.
14
15    You should have received a copy of the GNU Library General Public
16    License along with the GNU C Library; see the file COPYING.LIB.  If not,
17    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18    Boston, MA 02111-1307, USA.  */
19
20 #ifndef _CHARSET_H
21 #define _CHARSET_H
22
23 #include <obstack.h>
24
25 #include "repertoire.h"
26 #include "simple-hash.h"
27 #include "linereader.h"
28
29
30 struct width_rule
31 {
32   unsigned int from;
33   unsigned int to;
34   unsigned int width;
35 };
36
37
38 struct charset_t
39 {
40   const char *repertoiremap;
41   struct repertoire_t *repertoire;
42
43   const char *code_set_name;
44   int mb_cur_min;
45   int mb_cur_max;
46
47   struct width_rule *width_rules;
48   size_t nwidth_rules;
49   size_t nwidth_rules_max;
50   unsigned int width_default;
51
52   struct obstack mem_pool;
53   hash_table char_table;
54 };
55
56
57 /* We need one value to mark the error case.  Let's use 0xffffffff.
58    I.e., it is placed in the last page of ISO 10646.  For now only the
59    first is used and we have plenty of room.  */
60 #define ILLEGAL_CHAR_VALUE ((wchar_t) 0xffffffffu)
61
62
63 /* Declared in localedef.c.  */
64 extern int be_quiet;
65
66 /* Prototypes for charmap handling functions.  */
67 struct charset_t *charmap_read (const char *filename);
68
69 /* Prototypes for function to insert new character.  */
70 void charset_new_char (struct linereader *lr, hash_table *ht, int bytes,
71                        unsigned int value, const char *from, const char *to);
72
73 /* Return the value stored under the given key in the hashing table.  */
74 unsigned int charset_find_value (const hash_table *ht,
75                                  const char *name, size_t len);
76
77 #endif /* charset.h */