second update 960907 from main archive
[kopensolaris-gnu/glibc.git] / locale / programs / charset.h
1 /* Copyright (C) 1996 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3 Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
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
17 not, 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 "simple-hash.h"
26 #include "linereader.h"
27
28
29 struct width_rule
30 {
31   unsigned int from;
32   unsigned int to;
33   unsigned int width;
34 };
35
36
37 struct charset_t
38 {
39   const char *code_set_name;
40   int mb_cur_min;
41   int mb_cur_max;
42
43   struct width_rule *width_rules;
44   size_t nwidth_rules;
45   size_t nwidth_rules_max;
46   int width_default;
47
48   struct obstack mem_pool;
49   hash_table char_table;
50 };
51
52
53 /* We need one value to mark the error case.  Let's use 0xffffffff.
54    I.e., it is placed in the last page of ISO 10646.  For now only the
55    first is used and we have plenty of room.  */
56 #define ILLEGAL_CHAR_VALUE ((wchar_t) 0xffffffffu)
57
58
59 /* Prototypes for charmap handling functions.  */
60 struct charset_t *charmap_read (const char *filename);
61
62 /* Prototypes for funciton to insert new character.  */
63 void charset_new_char (struct linereader *lr, struct charset_t *cs, int bytes,
64                        unsigned int value, const char *from, const char *to);
65
66 void charset_new_unicode (struct linereader *lr, struct charset_t *cs,
67                           int bytes, unsigned int value, const char *from,
68                           const char *to);
69
70 unsigned int charset_find_value (const struct charset_t *__cs,
71                                  const char *__name, size_t __len);
72
73 #endif /* charset.h */