| 1 | /* Copyright (C) 1996-2023 Free Software Foundation, Inc. | 
| 2 |    This file is part of the GNU C Library. | 
| 3 |  | 
| 4 |    This program is free software; you can redistribute it and/or modify | 
| 5 |    it under the terms of the GNU General Public License as published | 
| 6 |    by the Free Software Foundation; version 2 of the License, or | 
| 7 |    (at your option) any later version. | 
| 8 |  | 
| 9 |    This program is distributed in the hope that it will be useful, | 
| 10 |    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 11 |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
| 12 |    GNU General Public License for more details. | 
| 13 |  | 
| 14 |    You should have received a copy of the GNU General Public License | 
| 15 |    along with this program; if not, see <https://www.gnu.org/licenses/>.  */ | 
| 16 |  | 
| 17 | #ifndef _CHARMAP_H | 
| 18 | #define _CHARMAP_H | 
| 19 |  | 
| 20 | #include <obstack.h> | 
| 21 | #include <stdbool.h> | 
| 22 | #include <stdint.h> | 
| 23 |  | 
| 24 | #include "repertoire.h" | 
| 25 | #include "simple-hash.h" | 
| 26 |  | 
| 27 |  | 
| 28 | struct width_rule | 
| 29 | { | 
| 30 |   struct charseq *from; | 
| 31 |   struct charseq *to; | 
| 32 |   unsigned int width; | 
| 33 | }; | 
| 34 |  | 
| 35 |  | 
| 36 | struct charmap_t | 
| 37 | { | 
| 38 |   const char *code_set_name; | 
| 39 |   const char *repertoiremap; | 
| 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 |   unsigned int width_default; | 
| 47 |  | 
| 48 |   struct obstack mem_pool; | 
| 49 |   hash_table char_table; | 
| 50 |   hash_table byte_table; | 
| 51 |   hash_table ucs4_table; | 
| 52 | }; | 
| 53 |  | 
| 54 |  | 
| 55 | /* This is the structure used for entries in the hash table.  It represents | 
| 56 |    the sequence of bytes used for the coded character.  */ | 
| 57 | struct charseq | 
| 58 | { | 
| 59 |   const char *name; | 
| 60 |   uint32_t ucs4; | 
| 61 |   int nbytes; | 
| 62 |   unsigned char bytes[]; | 
| 63 | }; | 
| 64 |  | 
| 65 |  | 
| 66 | /* True if the encoding is not ASCII compatible.  */ | 
| 67 | extern bool enc_not_ascii_compatible; | 
| 68 |  | 
| 69 |  | 
| 70 | /* Prototypes for charmap handling functions.  */ | 
| 71 | extern struct charmap_t *charmap_read (const char *filename, int verbose, | 
| 72 | 				       int error_not_found, int be_quiet, | 
| 73 | 				       int use_default); | 
| 74 |  | 
| 75 | /* Return the value stored under the given key in the hashing table.  */ | 
| 76 | extern struct charseq *charmap_find_value (const struct charmap_t *charmap, | 
| 77 | 					   const char *name, size_t len); | 
| 78 |  | 
| 79 | /* Return symbol for given multibyte sequence.  */ | 
| 80 | extern struct charseq *charmap_find_symbol (const struct charmap_t *charmap, | 
| 81 | 					    const char *name, size_t len); | 
| 82 |  | 
| 83 | #endif /* charmap.h */ | 
| 84 |  |