/src/libidn2/unistring/uninorm/decomposition-table.h
Line  | Count  | Source  | 
1  |  | /* Decomposition of Unicode characters.  | 
2  |  |    Copyright (C) 2001-2003, 2009-2025 Free Software Foundation, Inc.  | 
3  |  |    Written by Bruno Haible <bruno@clisp.org>, 2009.  | 
4  |  |  | 
5  |  |    This file is free software: you can redistribute it and/or modify  | 
6  |  |    it under the terms of the GNU Lesser General Public License as  | 
7  |  |    published by the Free Software Foundation; either version 2.1 of the  | 
8  |  |    License, or (at your option) any later version.  | 
9  |  |  | 
10  |  |    This file 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  | 
13  |  |    GNU Lesser General Public License for more details.  | 
14  |  |  | 
15  |  |    You should have received a copy of the GNU Lesser General Public License  | 
16  |  |    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */  | 
17  |  |  | 
18  |  |  | 
19  |  | #include "unitypes.h"  | 
20  |  |  | 
21  |  | /* The decomposition table is made of two parts:  | 
22  |  |      - A table containing the actual arrays of decomposed equivalents.  | 
23  |  |        (This table is separate because the maximum length of a decomposition  | 
24  |  |        is 18, much larger than the average length 1.497 of a decomposition).  | 
25  |  |      - A 3-level table of indices into this array.  */  | 
26  |  |  | 
27  |  | #include "decomposition-table1.h"  | 
28  |  |  | 
29  |  | static inline unsigned short  | 
30  |  | decomp_index (ucs4_t uc)  | 
31  | 786k  | { | 
32  | 786k  |   unsigned int index1 = uc >> decomp_header_0;  | 
33  | 786k  |   if (index1 < decomp_header_1)  | 
34  | 783k  |     { | 
35  | 783k  |       int lookup1 = gl_uninorm_decomp_index_table.level1[index1];  | 
36  | 783k  |       if (lookup1 >= 0)  | 
37  | 749k  |         { | 
38  | 749k  |           unsigned int index2 = (uc >> decomp_header_2) & decomp_header_3;  | 
39  | 749k  |           int lookup2 = gl_uninorm_decomp_index_table.level2[lookup1 + index2];  | 
40  | 749k  |           if (lookup2 >= 0)  | 
41  | 219k  |             { | 
42  | 219k  |               unsigned int index3 = uc & decomp_header_4;  | 
43  | 219k  |               return gl_uninorm_decomp_index_table.level3[lookup2 + index3];  | 
44  | 219k  |             }  | 
45  | 749k  |         }  | 
46  | 783k  |     }  | 
47  | 567k  |   return (unsigned short)(-1);  | 
48  | 786k  | } canonical-decomposition.c:decomp_index Line  | Count  | Source  |  31  | 786k  | { |  32  | 786k  |   unsigned int index1 = uc >> decomp_header_0;  |  33  | 786k  |   if (index1 < decomp_header_1)  |  34  | 783k  |     { |  35  | 783k  |       int lookup1 = gl_uninorm_decomp_index_table.level1[index1];  |  36  | 783k  |       if (lookup1 >= 0)  |  37  | 749k  |         { |  38  | 749k  |           unsigned int index2 = (uc >> decomp_header_2) & decomp_header_3;  |  39  | 749k  |           int lookup2 = gl_uninorm_decomp_index_table.level2[lookup1 + index2];  |  40  | 749k  |           if (lookup2 >= 0)  |  41  | 219k  |             { |  42  | 219k  |               unsigned int index3 = uc & decomp_header_4;  |  43  | 219k  |               return gl_uninorm_decomp_index_table.level3[lookup2 + index3];  |  44  | 219k  |             }  |  45  | 749k  |         }  |  46  | 783k  |     }  |  47  | 567k  |   return (unsigned short)(-1);  |  48  | 786k  | }  |  
 Unexecuted instantiation: decomposition-table.c:decomp_index  |