This commit is contained in:
2024-12-14 10:43:33 +03:00
parent 7f8090bb1f
commit bbf76e4925
1292 changed files with 2823 additions and 500876 deletions

View File

@@ -1,25 +0,0 @@
/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
/* Canonical composition of Unicode characters. */
/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */
/* Copyright (C) 2009-2024 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Maximum value of the first argument for which gl_uninorm_compose_lookup
can return a non-NULL value. */
#define UNINORM_COMPOSE_MAX_ARG1 0x16d69
/* Maximum value of the second argument for which gl_uninorm_compose_lookup
can return a non-NULL value. */
#define UNINORM_COMPOSE_MAX_ARG2 0x16d67

View File

@@ -1,991 +0,0 @@
/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
/* Canonical composition of Unicode characters. */
/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */
/* Copyright (C) 2009-2024 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
struct composition_rule { char codes[6]; };
%struct-type
%language=ANSI-C
%define slot-name codes
%define hash-function-name gl_uninorm_compose_hash
%define lookup-function-name gl_uninorm_compose_lookup
%compare-lengths
%compare-strncmp
%readonly-tables
%omit-struct-type
%%
"\x00\x00\x41\x00\x03\x00", 0x00c0
"\x00\x00\x41\x00\x03\x01", 0x00c1
"\x00\x00\x41\x00\x03\x02", 0x00c2
"\x00\x00\x41\x00\x03\x03", 0x00c3
"\x00\x00\x41\x00\x03\x08", 0x00c4
"\x00\x00\x41\x00\x03\x0a", 0x00c5
"\x00\x00\x43\x00\x03\x27", 0x00c7
"\x00\x00\x45\x00\x03\x00", 0x00c8
"\x00\x00\x45\x00\x03\x01", 0x00c9
"\x00\x00\x45\x00\x03\x02", 0x00ca
"\x00\x00\x45\x00\x03\x08", 0x00cb
"\x00\x00\x49\x00\x03\x00", 0x00cc
"\x00\x00\x49\x00\x03\x01", 0x00cd
"\x00\x00\x49\x00\x03\x02", 0x00ce
"\x00\x00\x49\x00\x03\x08", 0x00cf
"\x00\x00\x4e\x00\x03\x03", 0x00d1
"\x00\x00\x4f\x00\x03\x00", 0x00d2
"\x00\x00\x4f\x00\x03\x01", 0x00d3
"\x00\x00\x4f\x00\x03\x02", 0x00d4
"\x00\x00\x4f\x00\x03\x03", 0x00d5
"\x00\x00\x4f\x00\x03\x08", 0x00d6
"\x00\x00\x55\x00\x03\x00", 0x00d9
"\x00\x00\x55\x00\x03\x01", 0x00da
"\x00\x00\x55\x00\x03\x02", 0x00db
"\x00\x00\x55\x00\x03\x08", 0x00dc
"\x00\x00\x59\x00\x03\x01", 0x00dd
"\x00\x00\x61\x00\x03\x00", 0x00e0
"\x00\x00\x61\x00\x03\x01", 0x00e1
"\x00\x00\x61\x00\x03\x02", 0x00e2
"\x00\x00\x61\x00\x03\x03", 0x00e3
"\x00\x00\x61\x00\x03\x08", 0x00e4
"\x00\x00\x61\x00\x03\x0a", 0x00e5
"\x00\x00\x63\x00\x03\x27", 0x00e7
"\x00\x00\x65\x00\x03\x00", 0x00e8
"\x00\x00\x65\x00\x03\x01", 0x00e9
"\x00\x00\x65\x00\x03\x02", 0x00ea
"\x00\x00\x65\x00\x03\x08", 0x00eb
"\x00\x00\x69\x00\x03\x00", 0x00ec
"\x00\x00\x69\x00\x03\x01", 0x00ed
"\x00\x00\x69\x00\x03\x02", 0x00ee
"\x00\x00\x69\x00\x03\x08", 0x00ef
"\x00\x00\x6e\x00\x03\x03", 0x00f1
"\x00\x00\x6f\x00\x03\x00", 0x00f2
"\x00\x00\x6f\x00\x03\x01", 0x00f3
"\x00\x00\x6f\x00\x03\x02", 0x00f4
"\x00\x00\x6f\x00\x03\x03", 0x00f5
"\x00\x00\x6f\x00\x03\x08", 0x00f6
"\x00\x00\x75\x00\x03\x00", 0x00f9
"\x00\x00\x75\x00\x03\x01", 0x00fa
"\x00\x00\x75\x00\x03\x02", 0x00fb
"\x00\x00\x75\x00\x03\x08", 0x00fc
"\x00\x00\x79\x00\x03\x01", 0x00fd
"\x00\x00\x79\x00\x03\x08", 0x00ff
"\x00\x00\x41\x00\x03\x04", 0x0100
"\x00\x00\x61\x00\x03\x04", 0x0101
"\x00\x00\x41\x00\x03\x06", 0x0102
"\x00\x00\x61\x00\x03\x06", 0x0103
"\x00\x00\x41\x00\x03\x28", 0x0104
"\x00\x00\x61\x00\x03\x28", 0x0105
"\x00\x00\x43\x00\x03\x01", 0x0106
"\x00\x00\x63\x00\x03\x01", 0x0107
"\x00\x00\x43\x00\x03\x02", 0x0108
"\x00\x00\x63\x00\x03\x02", 0x0109
"\x00\x00\x43\x00\x03\x07", 0x010a
"\x00\x00\x63\x00\x03\x07", 0x010b
"\x00\x00\x43\x00\x03\x0c", 0x010c
"\x00\x00\x63\x00\x03\x0c", 0x010d
"\x00\x00\x44\x00\x03\x0c", 0x010e
"\x00\x00\x64\x00\x03\x0c", 0x010f
"\x00\x00\x45\x00\x03\x04", 0x0112
"\x00\x00\x65\x00\x03\x04", 0x0113
"\x00\x00\x45\x00\x03\x06", 0x0114
"\x00\x00\x65\x00\x03\x06", 0x0115
"\x00\x00\x45\x00\x03\x07", 0x0116
"\x00\x00\x65\x00\x03\x07", 0x0117
"\x00\x00\x45\x00\x03\x28", 0x0118
"\x00\x00\x65\x00\x03\x28", 0x0119
"\x00\x00\x45\x00\x03\x0c", 0x011a
"\x00\x00\x65\x00\x03\x0c", 0x011b
"\x00\x00\x47\x00\x03\x02", 0x011c
"\x00\x00\x67\x00\x03\x02", 0x011d
"\x00\x00\x47\x00\x03\x06", 0x011e
"\x00\x00\x67\x00\x03\x06", 0x011f
"\x00\x00\x47\x00\x03\x07", 0x0120
"\x00\x00\x67\x00\x03\x07", 0x0121
"\x00\x00\x47\x00\x03\x27", 0x0122
"\x00\x00\x67\x00\x03\x27", 0x0123
"\x00\x00\x48\x00\x03\x02", 0x0124
"\x00\x00\x68\x00\x03\x02", 0x0125
"\x00\x00\x49\x00\x03\x03", 0x0128
"\x00\x00\x69\x00\x03\x03", 0x0129
"\x00\x00\x49\x00\x03\x04", 0x012a
"\x00\x00\x69\x00\x03\x04", 0x012b
"\x00\x00\x49\x00\x03\x06", 0x012c
"\x00\x00\x69\x00\x03\x06", 0x012d
"\x00\x00\x49\x00\x03\x28", 0x012e
"\x00\x00\x69\x00\x03\x28", 0x012f
"\x00\x00\x49\x00\x03\x07", 0x0130
"\x00\x00\x4a\x00\x03\x02", 0x0134
"\x00\x00\x6a\x00\x03\x02", 0x0135
"\x00\x00\x4b\x00\x03\x27", 0x0136
"\x00\x00\x6b\x00\x03\x27", 0x0137
"\x00\x00\x4c\x00\x03\x01", 0x0139
"\x00\x00\x6c\x00\x03\x01", 0x013a
"\x00\x00\x4c\x00\x03\x27", 0x013b
"\x00\x00\x6c\x00\x03\x27", 0x013c
"\x00\x00\x4c\x00\x03\x0c", 0x013d
"\x00\x00\x6c\x00\x03\x0c", 0x013e
"\x00\x00\x4e\x00\x03\x01", 0x0143
"\x00\x00\x6e\x00\x03\x01", 0x0144
"\x00\x00\x4e\x00\x03\x27", 0x0145
"\x00\x00\x6e\x00\x03\x27", 0x0146
"\x00\x00\x4e\x00\x03\x0c", 0x0147
"\x00\x00\x6e\x00\x03\x0c", 0x0148
"\x00\x00\x4f\x00\x03\x04", 0x014c
"\x00\x00\x6f\x00\x03\x04", 0x014d
"\x00\x00\x4f\x00\x03\x06", 0x014e
"\x00\x00\x6f\x00\x03\x06", 0x014f
"\x00\x00\x4f\x00\x03\x0b", 0x0150
"\x00\x00\x6f\x00\x03\x0b", 0x0151
"\x00\x00\x52\x00\x03\x01", 0x0154
"\x00\x00\x72\x00\x03\x01", 0x0155
"\x00\x00\x52\x00\x03\x27", 0x0156
"\x00\x00\x72\x00\x03\x27", 0x0157
"\x00\x00\x52\x00\x03\x0c", 0x0158
"\x00\x00\x72\x00\x03\x0c", 0x0159
"\x00\x00\x53\x00\x03\x01", 0x015a
"\x00\x00\x73\x00\x03\x01", 0x015b
"\x00\x00\x53\x00\x03\x02", 0x015c
"\x00\x00\x73\x00\x03\x02", 0x015d
"\x00\x00\x53\x00\x03\x27", 0x015e
"\x00\x00\x73\x00\x03\x27", 0x015f
"\x00\x00\x53\x00\x03\x0c", 0x0160
"\x00\x00\x73\x00\x03\x0c", 0x0161
"\x00\x00\x54\x00\x03\x27", 0x0162
"\x00\x00\x74\x00\x03\x27", 0x0163
"\x00\x00\x54\x00\x03\x0c", 0x0164
"\x00\x00\x74\x00\x03\x0c", 0x0165
"\x00\x00\x55\x00\x03\x03", 0x0168
"\x00\x00\x75\x00\x03\x03", 0x0169
"\x00\x00\x55\x00\x03\x04", 0x016a
"\x00\x00\x75\x00\x03\x04", 0x016b
"\x00\x00\x55\x00\x03\x06", 0x016c
"\x00\x00\x75\x00\x03\x06", 0x016d
"\x00\x00\x55\x00\x03\x0a", 0x016e
"\x00\x00\x75\x00\x03\x0a", 0x016f
"\x00\x00\x55\x00\x03\x0b", 0x0170
"\x00\x00\x75\x00\x03\x0b", 0x0171
"\x00\x00\x55\x00\x03\x28", 0x0172
"\x00\x00\x75\x00\x03\x28", 0x0173
"\x00\x00\x57\x00\x03\x02", 0x0174
"\x00\x00\x77\x00\x03\x02", 0x0175
"\x00\x00\x59\x00\x03\x02", 0x0176
"\x00\x00\x79\x00\x03\x02", 0x0177
"\x00\x00\x59\x00\x03\x08", 0x0178
"\x00\x00\x5a\x00\x03\x01", 0x0179
"\x00\x00\x7a\x00\x03\x01", 0x017a
"\x00\x00\x5a\x00\x03\x07", 0x017b
"\x00\x00\x7a\x00\x03\x07", 0x017c
"\x00\x00\x5a\x00\x03\x0c", 0x017d
"\x00\x00\x7a\x00\x03\x0c", 0x017e
"\x00\x00\x4f\x00\x03\x1b", 0x01a0
"\x00\x00\x6f\x00\x03\x1b", 0x01a1
"\x00\x00\x55\x00\x03\x1b", 0x01af
"\x00\x00\x75\x00\x03\x1b", 0x01b0
"\x00\x00\x41\x00\x03\x0c", 0x01cd
"\x00\x00\x61\x00\x03\x0c", 0x01ce
"\x00\x00\x49\x00\x03\x0c", 0x01cf
"\x00\x00\x69\x00\x03\x0c", 0x01d0
"\x00\x00\x4f\x00\x03\x0c", 0x01d1
"\x00\x00\x6f\x00\x03\x0c", 0x01d2
"\x00\x00\x55\x00\x03\x0c", 0x01d3
"\x00\x00\x75\x00\x03\x0c", 0x01d4
"\x00\x00\xdc\x00\x03\x04", 0x01d5
"\x00\x00\xfc\x00\x03\x04", 0x01d6
"\x00\x00\xdc\x00\x03\x01", 0x01d7
"\x00\x00\xfc\x00\x03\x01", 0x01d8
"\x00\x00\xdc\x00\x03\x0c", 0x01d9
"\x00\x00\xfc\x00\x03\x0c", 0x01da
"\x00\x00\xdc\x00\x03\x00", 0x01db
"\x00\x00\xfc\x00\x03\x00", 0x01dc
"\x00\x00\xc4\x00\x03\x04", 0x01de
"\x00\x00\xe4\x00\x03\x04", 0x01df
"\x00\x02\x26\x00\x03\x04", 0x01e0
"\x00\x02\x27\x00\x03\x04", 0x01e1
"\x00\x00\xc6\x00\x03\x04", 0x01e2
"\x00\x00\xe6\x00\x03\x04", 0x01e3
"\x00\x00\x47\x00\x03\x0c", 0x01e6
"\x00\x00\x67\x00\x03\x0c", 0x01e7
"\x00\x00\x4b\x00\x03\x0c", 0x01e8
"\x00\x00\x6b\x00\x03\x0c", 0x01e9
"\x00\x00\x4f\x00\x03\x28", 0x01ea
"\x00\x00\x6f\x00\x03\x28", 0x01eb
"\x00\x01\xea\x00\x03\x04", 0x01ec
"\x00\x01\xeb\x00\x03\x04", 0x01ed
"\x00\x01\xb7\x00\x03\x0c", 0x01ee
"\x00\x02\x92\x00\x03\x0c", 0x01ef
"\x00\x00\x6a\x00\x03\x0c", 0x01f0
"\x00\x00\x47\x00\x03\x01", 0x01f4
"\x00\x00\x67\x00\x03\x01", 0x01f5
"\x00\x00\x4e\x00\x03\x00", 0x01f8
"\x00\x00\x6e\x00\x03\x00", 0x01f9
"\x00\x00\xc5\x00\x03\x01", 0x01fa
"\x00\x00\xe5\x00\x03\x01", 0x01fb
"\x00\x00\xc6\x00\x03\x01", 0x01fc
"\x00\x00\xe6\x00\x03\x01", 0x01fd
"\x00\x00\xd8\x00\x03\x01", 0x01fe
"\x00\x00\xf8\x00\x03\x01", 0x01ff
"\x00\x00\x41\x00\x03\x0f", 0x0200
"\x00\x00\x61\x00\x03\x0f", 0x0201
"\x00\x00\x41\x00\x03\x11", 0x0202
"\x00\x00\x61\x00\x03\x11", 0x0203
"\x00\x00\x45\x00\x03\x0f", 0x0204
"\x00\x00\x65\x00\x03\x0f", 0x0205
"\x00\x00\x45\x00\x03\x11", 0x0206
"\x00\x00\x65\x00\x03\x11", 0x0207
"\x00\x00\x49\x00\x03\x0f", 0x0208
"\x00\x00\x69\x00\x03\x0f", 0x0209
"\x00\x00\x49\x00\x03\x11", 0x020a
"\x00\x00\x69\x00\x03\x11", 0x020b
"\x00\x00\x4f\x00\x03\x0f", 0x020c
"\x00\x00\x6f\x00\x03\x0f", 0x020d
"\x00\x00\x4f\x00\x03\x11", 0x020e
"\x00\x00\x6f\x00\x03\x11", 0x020f
"\x00\x00\x52\x00\x03\x0f", 0x0210
"\x00\x00\x72\x00\x03\x0f", 0x0211
"\x00\x00\x52\x00\x03\x11", 0x0212
"\x00\x00\x72\x00\x03\x11", 0x0213
"\x00\x00\x55\x00\x03\x0f", 0x0214
"\x00\x00\x75\x00\x03\x0f", 0x0215
"\x00\x00\x55\x00\x03\x11", 0x0216
"\x00\x00\x75\x00\x03\x11", 0x0217
"\x00\x00\x53\x00\x03\x26", 0x0218
"\x00\x00\x73\x00\x03\x26", 0x0219
"\x00\x00\x54\x00\x03\x26", 0x021a
"\x00\x00\x74\x00\x03\x26", 0x021b
"\x00\x00\x48\x00\x03\x0c", 0x021e
"\x00\x00\x68\x00\x03\x0c", 0x021f
"\x00\x00\x41\x00\x03\x07", 0x0226
"\x00\x00\x61\x00\x03\x07", 0x0227
"\x00\x00\x45\x00\x03\x27", 0x0228
"\x00\x00\x65\x00\x03\x27", 0x0229
"\x00\x00\xd6\x00\x03\x04", 0x022a
"\x00\x00\xf6\x00\x03\x04", 0x022b
"\x00\x00\xd5\x00\x03\x04", 0x022c
"\x00\x00\xf5\x00\x03\x04", 0x022d
"\x00\x00\x4f\x00\x03\x07", 0x022e
"\x00\x00\x6f\x00\x03\x07", 0x022f
"\x00\x02\x2e\x00\x03\x04", 0x0230
"\x00\x02\x2f\x00\x03\x04", 0x0231
"\x00\x00\x59\x00\x03\x04", 0x0232
"\x00\x00\x79\x00\x03\x04", 0x0233
"\x00\x00\xa8\x00\x03\x01", 0x0385
"\x00\x03\x91\x00\x03\x01", 0x0386
"\x00\x03\x95\x00\x03\x01", 0x0388
"\x00\x03\x97\x00\x03\x01", 0x0389
"\x00\x03\x99\x00\x03\x01", 0x038a
"\x00\x03\x9f\x00\x03\x01", 0x038c
"\x00\x03\xa5\x00\x03\x01", 0x038e
"\x00\x03\xa9\x00\x03\x01", 0x038f
"\x00\x03\xca\x00\x03\x01", 0x0390
"\x00\x03\x99\x00\x03\x08", 0x03aa
"\x00\x03\xa5\x00\x03\x08", 0x03ab
"\x00\x03\xb1\x00\x03\x01", 0x03ac
"\x00\x03\xb5\x00\x03\x01", 0x03ad
"\x00\x03\xb7\x00\x03\x01", 0x03ae
"\x00\x03\xb9\x00\x03\x01", 0x03af
"\x00\x03\xcb\x00\x03\x01", 0x03b0
"\x00\x03\xb9\x00\x03\x08", 0x03ca
"\x00\x03\xc5\x00\x03\x08", 0x03cb
"\x00\x03\xbf\x00\x03\x01", 0x03cc
"\x00\x03\xc5\x00\x03\x01", 0x03cd
"\x00\x03\xc9\x00\x03\x01", 0x03ce
"\x00\x03\xd2\x00\x03\x01", 0x03d3
"\x00\x03\xd2\x00\x03\x08", 0x03d4
"\x00\x04\x15\x00\x03\x00", 0x0400
"\x00\x04\x15\x00\x03\x08", 0x0401
"\x00\x04\x13\x00\x03\x01", 0x0403
"\x00\x04\x06\x00\x03\x08", 0x0407
"\x00\x04\x1a\x00\x03\x01", 0x040c
"\x00\x04\x18\x00\x03\x00", 0x040d
"\x00\x04\x23\x00\x03\x06", 0x040e
"\x00\x04\x18\x00\x03\x06", 0x0419
"\x00\x04\x38\x00\x03\x06", 0x0439
"\x00\x04\x35\x00\x03\x00", 0x0450
"\x00\x04\x35\x00\x03\x08", 0x0451
"\x00\x04\x33\x00\x03\x01", 0x0453
"\x00\x04\x56\x00\x03\x08", 0x0457
"\x00\x04\x3a\x00\x03\x01", 0x045c
"\x00\x04\x38\x00\x03\x00", 0x045d
"\x00\x04\x43\x00\x03\x06", 0x045e
"\x00\x04\x74\x00\x03\x0f", 0x0476
"\x00\x04\x75\x00\x03\x0f", 0x0477
"\x00\x04\x16\x00\x03\x06", 0x04c1
"\x00\x04\x36\x00\x03\x06", 0x04c2
"\x00\x04\x10\x00\x03\x06", 0x04d0
"\x00\x04\x30\x00\x03\x06", 0x04d1
"\x00\x04\x10\x00\x03\x08", 0x04d2
"\x00\x04\x30\x00\x03\x08", 0x04d3
"\x00\x04\x15\x00\x03\x06", 0x04d6
"\x00\x04\x35\x00\x03\x06", 0x04d7
"\x00\x04\xd8\x00\x03\x08", 0x04da
"\x00\x04\xd9\x00\x03\x08", 0x04db
"\x00\x04\x16\x00\x03\x08", 0x04dc
"\x00\x04\x36\x00\x03\x08", 0x04dd
"\x00\x04\x17\x00\x03\x08", 0x04de
"\x00\x04\x37\x00\x03\x08", 0x04df
"\x00\x04\x18\x00\x03\x04", 0x04e2
"\x00\x04\x38\x00\x03\x04", 0x04e3
"\x00\x04\x18\x00\x03\x08", 0x04e4
"\x00\x04\x38\x00\x03\x08", 0x04e5
"\x00\x04\x1e\x00\x03\x08", 0x04e6
"\x00\x04\x3e\x00\x03\x08", 0x04e7
"\x00\x04\xe8\x00\x03\x08", 0x04ea
"\x00\x04\xe9\x00\x03\x08", 0x04eb
"\x00\x04\x2d\x00\x03\x08", 0x04ec
"\x00\x04\x4d\x00\x03\x08", 0x04ed
"\x00\x04\x23\x00\x03\x04", 0x04ee
"\x00\x04\x43\x00\x03\x04", 0x04ef
"\x00\x04\x23\x00\x03\x08", 0x04f0
"\x00\x04\x43\x00\x03\x08", 0x04f1
"\x00\x04\x23\x00\x03\x0b", 0x04f2
"\x00\x04\x43\x00\x03\x0b", 0x04f3
"\x00\x04\x27\x00\x03\x08", 0x04f4
"\x00\x04\x47\x00\x03\x08", 0x04f5
"\x00\x04\x2b\x00\x03\x08", 0x04f8
"\x00\x04\x4b\x00\x03\x08", 0x04f9
"\x00\x06\x27\x00\x06\x53", 0x0622
"\x00\x06\x27\x00\x06\x54", 0x0623
"\x00\x06\x48\x00\x06\x54", 0x0624
"\x00\x06\x27\x00\x06\x55", 0x0625
"\x00\x06\x4a\x00\x06\x54", 0x0626
"\x00\x06\xd5\x00\x06\x54", 0x06c0
"\x00\x06\xc1\x00\x06\x54", 0x06c2
"\x00\x06\xd2\x00\x06\x54", 0x06d3
"\x00\x09\x28\x00\x09\x3c", 0x0929
"\x00\x09\x30\x00\x09\x3c", 0x0931
"\x00\x09\x33\x00\x09\x3c", 0x0934
"\x00\x09\xc7\x00\x09\xbe", 0x09cb
"\x00\x09\xc7\x00\x09\xd7", 0x09cc
"\x00\x0b\x47\x00\x0b\x56", 0x0b48
"\x00\x0b\x47\x00\x0b\x3e", 0x0b4b
"\x00\x0b\x47\x00\x0b\x57", 0x0b4c
"\x00\x0b\x92\x00\x0b\xd7", 0x0b94
"\x00\x0b\xc6\x00\x0b\xbe", 0x0bca
"\x00\x0b\xc7\x00\x0b\xbe", 0x0bcb
"\x00\x0b\xc6\x00\x0b\xd7", 0x0bcc
"\x00\x0c\x46\x00\x0c\x56", 0x0c48
"\x00\x0c\xbf\x00\x0c\xd5", 0x0cc0
"\x00\x0c\xc6\x00\x0c\xd5", 0x0cc7
"\x00\x0c\xc6\x00\x0c\xd6", 0x0cc8
"\x00\x0c\xc6\x00\x0c\xc2", 0x0cca
"\x00\x0c\xca\x00\x0c\xd5", 0x0ccb
"\x00\x0d\x46\x00\x0d\x3e", 0x0d4a
"\x00\x0d\x47\x00\x0d\x3e", 0x0d4b
"\x00\x0d\x46\x00\x0d\x57", 0x0d4c
"\x00\x0d\xd9\x00\x0d\xca", 0x0dda
"\x00\x0d\xd9\x00\x0d\xcf", 0x0ddc
"\x00\x0d\xdc\x00\x0d\xca", 0x0ddd
"\x00\x0d\xd9\x00\x0d\xdf", 0x0dde
"\x00\x10\x25\x00\x10\x2e", 0x1026
"\x00\x1b\x05\x00\x1b\x35", 0x1b06
"\x00\x1b\x07\x00\x1b\x35", 0x1b08
"\x00\x1b\x09\x00\x1b\x35", 0x1b0a
"\x00\x1b\x0b\x00\x1b\x35", 0x1b0c
"\x00\x1b\x0d\x00\x1b\x35", 0x1b0e
"\x00\x1b\x11\x00\x1b\x35", 0x1b12
"\x00\x1b\x3a\x00\x1b\x35", 0x1b3b
"\x00\x1b\x3c\x00\x1b\x35", 0x1b3d
"\x00\x1b\x3e\x00\x1b\x35", 0x1b40
"\x00\x1b\x3f\x00\x1b\x35", 0x1b41
"\x00\x1b\x42\x00\x1b\x35", 0x1b43
"\x00\x00\x41\x00\x03\x25", 0x1e00
"\x00\x00\x61\x00\x03\x25", 0x1e01
"\x00\x00\x42\x00\x03\x07", 0x1e02
"\x00\x00\x62\x00\x03\x07", 0x1e03
"\x00\x00\x42\x00\x03\x23", 0x1e04
"\x00\x00\x62\x00\x03\x23", 0x1e05
"\x00\x00\x42\x00\x03\x31", 0x1e06
"\x00\x00\x62\x00\x03\x31", 0x1e07
"\x00\x00\xc7\x00\x03\x01", 0x1e08
"\x00\x00\xe7\x00\x03\x01", 0x1e09
"\x00\x00\x44\x00\x03\x07", 0x1e0a
"\x00\x00\x64\x00\x03\x07", 0x1e0b
"\x00\x00\x44\x00\x03\x23", 0x1e0c
"\x00\x00\x64\x00\x03\x23", 0x1e0d
"\x00\x00\x44\x00\x03\x31", 0x1e0e
"\x00\x00\x64\x00\x03\x31", 0x1e0f
"\x00\x00\x44\x00\x03\x27", 0x1e10
"\x00\x00\x64\x00\x03\x27", 0x1e11
"\x00\x00\x44\x00\x03\x2d", 0x1e12
"\x00\x00\x64\x00\x03\x2d", 0x1e13
"\x00\x01\x12\x00\x03\x00", 0x1e14
"\x00\x01\x13\x00\x03\x00", 0x1e15
"\x00\x01\x12\x00\x03\x01", 0x1e16
"\x00\x01\x13\x00\x03\x01", 0x1e17
"\x00\x00\x45\x00\x03\x2d", 0x1e18
"\x00\x00\x65\x00\x03\x2d", 0x1e19
"\x00\x00\x45\x00\x03\x30", 0x1e1a
"\x00\x00\x65\x00\x03\x30", 0x1e1b
"\x00\x02\x28\x00\x03\x06", 0x1e1c
"\x00\x02\x29\x00\x03\x06", 0x1e1d
"\x00\x00\x46\x00\x03\x07", 0x1e1e
"\x00\x00\x66\x00\x03\x07", 0x1e1f
"\x00\x00\x47\x00\x03\x04", 0x1e20
"\x00\x00\x67\x00\x03\x04", 0x1e21
"\x00\x00\x48\x00\x03\x07", 0x1e22
"\x00\x00\x68\x00\x03\x07", 0x1e23
"\x00\x00\x48\x00\x03\x23", 0x1e24
"\x00\x00\x68\x00\x03\x23", 0x1e25
"\x00\x00\x48\x00\x03\x08", 0x1e26
"\x00\x00\x68\x00\x03\x08", 0x1e27
"\x00\x00\x48\x00\x03\x27", 0x1e28
"\x00\x00\x68\x00\x03\x27", 0x1e29
"\x00\x00\x48\x00\x03\x2e", 0x1e2a
"\x00\x00\x68\x00\x03\x2e", 0x1e2b
"\x00\x00\x49\x00\x03\x30", 0x1e2c
"\x00\x00\x69\x00\x03\x30", 0x1e2d
"\x00\x00\xcf\x00\x03\x01", 0x1e2e
"\x00\x00\xef\x00\x03\x01", 0x1e2f
"\x00\x00\x4b\x00\x03\x01", 0x1e30
"\x00\x00\x6b\x00\x03\x01", 0x1e31
"\x00\x00\x4b\x00\x03\x23", 0x1e32
"\x00\x00\x6b\x00\x03\x23", 0x1e33
"\x00\x00\x4b\x00\x03\x31", 0x1e34
"\x00\x00\x6b\x00\x03\x31", 0x1e35
"\x00\x00\x4c\x00\x03\x23", 0x1e36
"\x00\x00\x6c\x00\x03\x23", 0x1e37
"\x00\x1e\x36\x00\x03\x04", 0x1e38
"\x00\x1e\x37\x00\x03\x04", 0x1e39
"\x00\x00\x4c\x00\x03\x31", 0x1e3a
"\x00\x00\x6c\x00\x03\x31", 0x1e3b
"\x00\x00\x4c\x00\x03\x2d", 0x1e3c
"\x00\x00\x6c\x00\x03\x2d", 0x1e3d
"\x00\x00\x4d\x00\x03\x01", 0x1e3e
"\x00\x00\x6d\x00\x03\x01", 0x1e3f
"\x00\x00\x4d\x00\x03\x07", 0x1e40
"\x00\x00\x6d\x00\x03\x07", 0x1e41
"\x00\x00\x4d\x00\x03\x23", 0x1e42
"\x00\x00\x6d\x00\x03\x23", 0x1e43
"\x00\x00\x4e\x00\x03\x07", 0x1e44
"\x00\x00\x6e\x00\x03\x07", 0x1e45
"\x00\x00\x4e\x00\x03\x23", 0x1e46
"\x00\x00\x6e\x00\x03\x23", 0x1e47
"\x00\x00\x4e\x00\x03\x31", 0x1e48
"\x00\x00\x6e\x00\x03\x31", 0x1e49
"\x00\x00\x4e\x00\x03\x2d", 0x1e4a
"\x00\x00\x6e\x00\x03\x2d", 0x1e4b
"\x00\x00\xd5\x00\x03\x01", 0x1e4c
"\x00\x00\xf5\x00\x03\x01", 0x1e4d
"\x00\x00\xd5\x00\x03\x08", 0x1e4e
"\x00\x00\xf5\x00\x03\x08", 0x1e4f
"\x00\x01\x4c\x00\x03\x00", 0x1e50
"\x00\x01\x4d\x00\x03\x00", 0x1e51
"\x00\x01\x4c\x00\x03\x01", 0x1e52
"\x00\x01\x4d\x00\x03\x01", 0x1e53
"\x00\x00\x50\x00\x03\x01", 0x1e54
"\x00\x00\x70\x00\x03\x01", 0x1e55
"\x00\x00\x50\x00\x03\x07", 0x1e56
"\x00\x00\x70\x00\x03\x07", 0x1e57
"\x00\x00\x52\x00\x03\x07", 0x1e58
"\x00\x00\x72\x00\x03\x07", 0x1e59
"\x00\x00\x52\x00\x03\x23", 0x1e5a
"\x00\x00\x72\x00\x03\x23", 0x1e5b
"\x00\x1e\x5a\x00\x03\x04", 0x1e5c
"\x00\x1e\x5b\x00\x03\x04", 0x1e5d
"\x00\x00\x52\x00\x03\x31", 0x1e5e
"\x00\x00\x72\x00\x03\x31", 0x1e5f
"\x00\x00\x53\x00\x03\x07", 0x1e60
"\x00\x00\x73\x00\x03\x07", 0x1e61
"\x00\x00\x53\x00\x03\x23", 0x1e62
"\x00\x00\x73\x00\x03\x23", 0x1e63
"\x00\x01\x5a\x00\x03\x07", 0x1e64
"\x00\x01\x5b\x00\x03\x07", 0x1e65
"\x00\x01\x60\x00\x03\x07", 0x1e66
"\x00\x01\x61\x00\x03\x07", 0x1e67
"\x00\x1e\x62\x00\x03\x07", 0x1e68
"\x00\x1e\x63\x00\x03\x07", 0x1e69
"\x00\x00\x54\x00\x03\x07", 0x1e6a
"\x00\x00\x74\x00\x03\x07", 0x1e6b
"\x00\x00\x54\x00\x03\x23", 0x1e6c
"\x00\x00\x74\x00\x03\x23", 0x1e6d
"\x00\x00\x54\x00\x03\x31", 0x1e6e
"\x00\x00\x74\x00\x03\x31", 0x1e6f
"\x00\x00\x54\x00\x03\x2d", 0x1e70
"\x00\x00\x74\x00\x03\x2d", 0x1e71
"\x00\x00\x55\x00\x03\x24", 0x1e72
"\x00\x00\x75\x00\x03\x24", 0x1e73
"\x00\x00\x55\x00\x03\x30", 0x1e74
"\x00\x00\x75\x00\x03\x30", 0x1e75
"\x00\x00\x55\x00\x03\x2d", 0x1e76
"\x00\x00\x75\x00\x03\x2d", 0x1e77
"\x00\x01\x68\x00\x03\x01", 0x1e78
"\x00\x01\x69\x00\x03\x01", 0x1e79
"\x00\x01\x6a\x00\x03\x08", 0x1e7a
"\x00\x01\x6b\x00\x03\x08", 0x1e7b
"\x00\x00\x56\x00\x03\x03", 0x1e7c
"\x00\x00\x76\x00\x03\x03", 0x1e7d
"\x00\x00\x56\x00\x03\x23", 0x1e7e
"\x00\x00\x76\x00\x03\x23", 0x1e7f
"\x00\x00\x57\x00\x03\x00", 0x1e80
"\x00\x00\x77\x00\x03\x00", 0x1e81
"\x00\x00\x57\x00\x03\x01", 0x1e82
"\x00\x00\x77\x00\x03\x01", 0x1e83
"\x00\x00\x57\x00\x03\x08", 0x1e84
"\x00\x00\x77\x00\x03\x08", 0x1e85
"\x00\x00\x57\x00\x03\x07", 0x1e86
"\x00\x00\x77\x00\x03\x07", 0x1e87
"\x00\x00\x57\x00\x03\x23", 0x1e88
"\x00\x00\x77\x00\x03\x23", 0x1e89
"\x00\x00\x58\x00\x03\x07", 0x1e8a
"\x00\x00\x78\x00\x03\x07", 0x1e8b
"\x00\x00\x58\x00\x03\x08", 0x1e8c
"\x00\x00\x78\x00\x03\x08", 0x1e8d
"\x00\x00\x59\x00\x03\x07", 0x1e8e
"\x00\x00\x79\x00\x03\x07", 0x1e8f
"\x00\x00\x5a\x00\x03\x02", 0x1e90
"\x00\x00\x7a\x00\x03\x02", 0x1e91
"\x00\x00\x5a\x00\x03\x23", 0x1e92
"\x00\x00\x7a\x00\x03\x23", 0x1e93
"\x00\x00\x5a\x00\x03\x31", 0x1e94
"\x00\x00\x7a\x00\x03\x31", 0x1e95
"\x00\x00\x68\x00\x03\x31", 0x1e96
"\x00\x00\x74\x00\x03\x08", 0x1e97
"\x00\x00\x77\x00\x03\x0a", 0x1e98
"\x00\x00\x79\x00\x03\x0a", 0x1e99
"\x00\x01\x7f\x00\x03\x07", 0x1e9b
"\x00\x00\x41\x00\x03\x23", 0x1ea0
"\x00\x00\x61\x00\x03\x23", 0x1ea1
"\x00\x00\x41\x00\x03\x09", 0x1ea2
"\x00\x00\x61\x00\x03\x09", 0x1ea3
"\x00\x00\xc2\x00\x03\x01", 0x1ea4
"\x00\x00\xe2\x00\x03\x01", 0x1ea5
"\x00\x00\xc2\x00\x03\x00", 0x1ea6
"\x00\x00\xe2\x00\x03\x00", 0x1ea7
"\x00\x00\xc2\x00\x03\x09", 0x1ea8
"\x00\x00\xe2\x00\x03\x09", 0x1ea9
"\x00\x00\xc2\x00\x03\x03", 0x1eaa
"\x00\x00\xe2\x00\x03\x03", 0x1eab
"\x00\x1e\xa0\x00\x03\x02", 0x1eac
"\x00\x1e\xa1\x00\x03\x02", 0x1ead
"\x00\x01\x02\x00\x03\x01", 0x1eae
"\x00\x01\x03\x00\x03\x01", 0x1eaf
"\x00\x01\x02\x00\x03\x00", 0x1eb0
"\x00\x01\x03\x00\x03\x00", 0x1eb1
"\x00\x01\x02\x00\x03\x09", 0x1eb2
"\x00\x01\x03\x00\x03\x09", 0x1eb3
"\x00\x01\x02\x00\x03\x03", 0x1eb4
"\x00\x01\x03\x00\x03\x03", 0x1eb5
"\x00\x1e\xa0\x00\x03\x06", 0x1eb6
"\x00\x1e\xa1\x00\x03\x06", 0x1eb7
"\x00\x00\x45\x00\x03\x23", 0x1eb8
"\x00\x00\x65\x00\x03\x23", 0x1eb9
"\x00\x00\x45\x00\x03\x09", 0x1eba
"\x00\x00\x65\x00\x03\x09", 0x1ebb
"\x00\x00\x45\x00\x03\x03", 0x1ebc
"\x00\x00\x65\x00\x03\x03", 0x1ebd
"\x00\x00\xca\x00\x03\x01", 0x1ebe
"\x00\x00\xea\x00\x03\x01", 0x1ebf
"\x00\x00\xca\x00\x03\x00", 0x1ec0
"\x00\x00\xea\x00\x03\x00", 0x1ec1
"\x00\x00\xca\x00\x03\x09", 0x1ec2
"\x00\x00\xea\x00\x03\x09", 0x1ec3
"\x00\x00\xca\x00\x03\x03", 0x1ec4
"\x00\x00\xea\x00\x03\x03", 0x1ec5
"\x00\x1e\xb8\x00\x03\x02", 0x1ec6
"\x00\x1e\xb9\x00\x03\x02", 0x1ec7
"\x00\x00\x49\x00\x03\x09", 0x1ec8
"\x00\x00\x69\x00\x03\x09", 0x1ec9
"\x00\x00\x49\x00\x03\x23", 0x1eca
"\x00\x00\x69\x00\x03\x23", 0x1ecb
"\x00\x00\x4f\x00\x03\x23", 0x1ecc
"\x00\x00\x6f\x00\x03\x23", 0x1ecd
"\x00\x00\x4f\x00\x03\x09", 0x1ece
"\x00\x00\x6f\x00\x03\x09", 0x1ecf
"\x00\x00\xd4\x00\x03\x01", 0x1ed0
"\x00\x00\xf4\x00\x03\x01", 0x1ed1
"\x00\x00\xd4\x00\x03\x00", 0x1ed2
"\x00\x00\xf4\x00\x03\x00", 0x1ed3
"\x00\x00\xd4\x00\x03\x09", 0x1ed4
"\x00\x00\xf4\x00\x03\x09", 0x1ed5
"\x00\x00\xd4\x00\x03\x03", 0x1ed6
"\x00\x00\xf4\x00\x03\x03", 0x1ed7
"\x00\x1e\xcc\x00\x03\x02", 0x1ed8
"\x00\x1e\xcd\x00\x03\x02", 0x1ed9
"\x00\x01\xa0\x00\x03\x01", 0x1eda
"\x00\x01\xa1\x00\x03\x01", 0x1edb
"\x00\x01\xa0\x00\x03\x00", 0x1edc
"\x00\x01\xa1\x00\x03\x00", 0x1edd
"\x00\x01\xa0\x00\x03\x09", 0x1ede
"\x00\x01\xa1\x00\x03\x09", 0x1edf
"\x00\x01\xa0\x00\x03\x03", 0x1ee0
"\x00\x01\xa1\x00\x03\x03", 0x1ee1
"\x00\x01\xa0\x00\x03\x23", 0x1ee2
"\x00\x01\xa1\x00\x03\x23", 0x1ee3
"\x00\x00\x55\x00\x03\x23", 0x1ee4
"\x00\x00\x75\x00\x03\x23", 0x1ee5
"\x00\x00\x55\x00\x03\x09", 0x1ee6
"\x00\x00\x75\x00\x03\x09", 0x1ee7
"\x00\x01\xaf\x00\x03\x01", 0x1ee8
"\x00\x01\xb0\x00\x03\x01", 0x1ee9
"\x00\x01\xaf\x00\x03\x00", 0x1eea
"\x00\x01\xb0\x00\x03\x00", 0x1eeb
"\x00\x01\xaf\x00\x03\x09", 0x1eec
"\x00\x01\xb0\x00\x03\x09", 0x1eed
"\x00\x01\xaf\x00\x03\x03", 0x1eee
"\x00\x01\xb0\x00\x03\x03", 0x1eef
"\x00\x01\xaf\x00\x03\x23", 0x1ef0
"\x00\x01\xb0\x00\x03\x23", 0x1ef1
"\x00\x00\x59\x00\x03\x00", 0x1ef2
"\x00\x00\x79\x00\x03\x00", 0x1ef3
"\x00\x00\x59\x00\x03\x23", 0x1ef4
"\x00\x00\x79\x00\x03\x23", 0x1ef5
"\x00\x00\x59\x00\x03\x09", 0x1ef6
"\x00\x00\x79\x00\x03\x09", 0x1ef7
"\x00\x00\x59\x00\x03\x03", 0x1ef8
"\x00\x00\x79\x00\x03\x03", 0x1ef9
"\x00\x03\xb1\x00\x03\x13", 0x1f00
"\x00\x03\xb1\x00\x03\x14", 0x1f01
"\x00\x1f\x00\x00\x03\x00", 0x1f02
"\x00\x1f\x01\x00\x03\x00", 0x1f03
"\x00\x1f\x00\x00\x03\x01", 0x1f04
"\x00\x1f\x01\x00\x03\x01", 0x1f05
"\x00\x1f\x00\x00\x03\x42", 0x1f06
"\x00\x1f\x01\x00\x03\x42", 0x1f07
"\x00\x03\x91\x00\x03\x13", 0x1f08
"\x00\x03\x91\x00\x03\x14", 0x1f09
"\x00\x1f\x08\x00\x03\x00", 0x1f0a
"\x00\x1f\x09\x00\x03\x00", 0x1f0b
"\x00\x1f\x08\x00\x03\x01", 0x1f0c
"\x00\x1f\x09\x00\x03\x01", 0x1f0d
"\x00\x1f\x08\x00\x03\x42", 0x1f0e
"\x00\x1f\x09\x00\x03\x42", 0x1f0f
"\x00\x03\xb5\x00\x03\x13", 0x1f10
"\x00\x03\xb5\x00\x03\x14", 0x1f11
"\x00\x1f\x10\x00\x03\x00", 0x1f12
"\x00\x1f\x11\x00\x03\x00", 0x1f13
"\x00\x1f\x10\x00\x03\x01", 0x1f14
"\x00\x1f\x11\x00\x03\x01", 0x1f15
"\x00\x03\x95\x00\x03\x13", 0x1f18
"\x00\x03\x95\x00\x03\x14", 0x1f19
"\x00\x1f\x18\x00\x03\x00", 0x1f1a
"\x00\x1f\x19\x00\x03\x00", 0x1f1b
"\x00\x1f\x18\x00\x03\x01", 0x1f1c
"\x00\x1f\x19\x00\x03\x01", 0x1f1d
"\x00\x03\xb7\x00\x03\x13", 0x1f20
"\x00\x03\xb7\x00\x03\x14", 0x1f21
"\x00\x1f\x20\x00\x03\x00", 0x1f22
"\x00\x1f\x21\x00\x03\x00", 0x1f23
"\x00\x1f\x20\x00\x03\x01", 0x1f24
"\x00\x1f\x21\x00\x03\x01", 0x1f25
"\x00\x1f\x20\x00\x03\x42", 0x1f26
"\x00\x1f\x21\x00\x03\x42", 0x1f27
"\x00\x03\x97\x00\x03\x13", 0x1f28
"\x00\x03\x97\x00\x03\x14", 0x1f29
"\x00\x1f\x28\x00\x03\x00", 0x1f2a
"\x00\x1f\x29\x00\x03\x00", 0x1f2b
"\x00\x1f\x28\x00\x03\x01", 0x1f2c
"\x00\x1f\x29\x00\x03\x01", 0x1f2d
"\x00\x1f\x28\x00\x03\x42", 0x1f2e
"\x00\x1f\x29\x00\x03\x42", 0x1f2f
"\x00\x03\xb9\x00\x03\x13", 0x1f30
"\x00\x03\xb9\x00\x03\x14", 0x1f31
"\x00\x1f\x30\x00\x03\x00", 0x1f32
"\x00\x1f\x31\x00\x03\x00", 0x1f33
"\x00\x1f\x30\x00\x03\x01", 0x1f34
"\x00\x1f\x31\x00\x03\x01", 0x1f35
"\x00\x1f\x30\x00\x03\x42", 0x1f36
"\x00\x1f\x31\x00\x03\x42", 0x1f37
"\x00\x03\x99\x00\x03\x13", 0x1f38
"\x00\x03\x99\x00\x03\x14", 0x1f39
"\x00\x1f\x38\x00\x03\x00", 0x1f3a
"\x00\x1f\x39\x00\x03\x00", 0x1f3b
"\x00\x1f\x38\x00\x03\x01", 0x1f3c
"\x00\x1f\x39\x00\x03\x01", 0x1f3d
"\x00\x1f\x38\x00\x03\x42", 0x1f3e
"\x00\x1f\x39\x00\x03\x42", 0x1f3f
"\x00\x03\xbf\x00\x03\x13", 0x1f40
"\x00\x03\xbf\x00\x03\x14", 0x1f41
"\x00\x1f\x40\x00\x03\x00", 0x1f42
"\x00\x1f\x41\x00\x03\x00", 0x1f43
"\x00\x1f\x40\x00\x03\x01", 0x1f44
"\x00\x1f\x41\x00\x03\x01", 0x1f45
"\x00\x03\x9f\x00\x03\x13", 0x1f48
"\x00\x03\x9f\x00\x03\x14", 0x1f49
"\x00\x1f\x48\x00\x03\x00", 0x1f4a
"\x00\x1f\x49\x00\x03\x00", 0x1f4b
"\x00\x1f\x48\x00\x03\x01", 0x1f4c
"\x00\x1f\x49\x00\x03\x01", 0x1f4d
"\x00\x03\xc5\x00\x03\x13", 0x1f50
"\x00\x03\xc5\x00\x03\x14", 0x1f51
"\x00\x1f\x50\x00\x03\x00", 0x1f52
"\x00\x1f\x51\x00\x03\x00", 0x1f53
"\x00\x1f\x50\x00\x03\x01", 0x1f54
"\x00\x1f\x51\x00\x03\x01", 0x1f55
"\x00\x1f\x50\x00\x03\x42", 0x1f56
"\x00\x1f\x51\x00\x03\x42", 0x1f57
"\x00\x03\xa5\x00\x03\x14", 0x1f59
"\x00\x1f\x59\x00\x03\x00", 0x1f5b
"\x00\x1f\x59\x00\x03\x01", 0x1f5d
"\x00\x1f\x59\x00\x03\x42", 0x1f5f
"\x00\x03\xc9\x00\x03\x13", 0x1f60
"\x00\x03\xc9\x00\x03\x14", 0x1f61
"\x00\x1f\x60\x00\x03\x00", 0x1f62
"\x00\x1f\x61\x00\x03\x00", 0x1f63
"\x00\x1f\x60\x00\x03\x01", 0x1f64
"\x00\x1f\x61\x00\x03\x01", 0x1f65
"\x00\x1f\x60\x00\x03\x42", 0x1f66
"\x00\x1f\x61\x00\x03\x42", 0x1f67
"\x00\x03\xa9\x00\x03\x13", 0x1f68
"\x00\x03\xa9\x00\x03\x14", 0x1f69
"\x00\x1f\x68\x00\x03\x00", 0x1f6a
"\x00\x1f\x69\x00\x03\x00", 0x1f6b
"\x00\x1f\x68\x00\x03\x01", 0x1f6c
"\x00\x1f\x69\x00\x03\x01", 0x1f6d
"\x00\x1f\x68\x00\x03\x42", 0x1f6e
"\x00\x1f\x69\x00\x03\x42", 0x1f6f
"\x00\x03\xb1\x00\x03\x00", 0x1f70
"\x00\x03\xb5\x00\x03\x00", 0x1f72
"\x00\x03\xb7\x00\x03\x00", 0x1f74
"\x00\x03\xb9\x00\x03\x00", 0x1f76
"\x00\x03\xbf\x00\x03\x00", 0x1f78
"\x00\x03\xc5\x00\x03\x00", 0x1f7a
"\x00\x03\xc9\x00\x03\x00", 0x1f7c
"\x00\x1f\x00\x00\x03\x45", 0x1f80
"\x00\x1f\x01\x00\x03\x45", 0x1f81
"\x00\x1f\x02\x00\x03\x45", 0x1f82
"\x00\x1f\x03\x00\x03\x45", 0x1f83
"\x00\x1f\x04\x00\x03\x45", 0x1f84
"\x00\x1f\x05\x00\x03\x45", 0x1f85
"\x00\x1f\x06\x00\x03\x45", 0x1f86
"\x00\x1f\x07\x00\x03\x45", 0x1f87
"\x00\x1f\x08\x00\x03\x45", 0x1f88
"\x00\x1f\x09\x00\x03\x45", 0x1f89
"\x00\x1f\x0a\x00\x03\x45", 0x1f8a
"\x00\x1f\x0b\x00\x03\x45", 0x1f8b
"\x00\x1f\x0c\x00\x03\x45", 0x1f8c
"\x00\x1f\x0d\x00\x03\x45", 0x1f8d
"\x00\x1f\x0e\x00\x03\x45", 0x1f8e
"\x00\x1f\x0f\x00\x03\x45", 0x1f8f
"\x00\x1f\x20\x00\x03\x45", 0x1f90
"\x00\x1f\x21\x00\x03\x45", 0x1f91
"\x00\x1f\x22\x00\x03\x45", 0x1f92
"\x00\x1f\x23\x00\x03\x45", 0x1f93
"\x00\x1f\x24\x00\x03\x45", 0x1f94
"\x00\x1f\x25\x00\x03\x45", 0x1f95
"\x00\x1f\x26\x00\x03\x45", 0x1f96
"\x00\x1f\x27\x00\x03\x45", 0x1f97
"\x00\x1f\x28\x00\x03\x45", 0x1f98
"\x00\x1f\x29\x00\x03\x45", 0x1f99
"\x00\x1f\x2a\x00\x03\x45", 0x1f9a
"\x00\x1f\x2b\x00\x03\x45", 0x1f9b
"\x00\x1f\x2c\x00\x03\x45", 0x1f9c
"\x00\x1f\x2d\x00\x03\x45", 0x1f9d
"\x00\x1f\x2e\x00\x03\x45", 0x1f9e
"\x00\x1f\x2f\x00\x03\x45", 0x1f9f
"\x00\x1f\x60\x00\x03\x45", 0x1fa0
"\x00\x1f\x61\x00\x03\x45", 0x1fa1
"\x00\x1f\x62\x00\x03\x45", 0x1fa2
"\x00\x1f\x63\x00\x03\x45", 0x1fa3
"\x00\x1f\x64\x00\x03\x45", 0x1fa4
"\x00\x1f\x65\x00\x03\x45", 0x1fa5
"\x00\x1f\x66\x00\x03\x45", 0x1fa6
"\x00\x1f\x67\x00\x03\x45", 0x1fa7
"\x00\x1f\x68\x00\x03\x45", 0x1fa8
"\x00\x1f\x69\x00\x03\x45", 0x1fa9
"\x00\x1f\x6a\x00\x03\x45", 0x1faa
"\x00\x1f\x6b\x00\x03\x45", 0x1fab
"\x00\x1f\x6c\x00\x03\x45", 0x1fac
"\x00\x1f\x6d\x00\x03\x45", 0x1fad
"\x00\x1f\x6e\x00\x03\x45", 0x1fae
"\x00\x1f\x6f\x00\x03\x45", 0x1faf
"\x00\x03\xb1\x00\x03\x06", 0x1fb0
"\x00\x03\xb1\x00\x03\x04", 0x1fb1
"\x00\x1f\x70\x00\x03\x45", 0x1fb2
"\x00\x03\xb1\x00\x03\x45", 0x1fb3
"\x00\x03\xac\x00\x03\x45", 0x1fb4
"\x00\x03\xb1\x00\x03\x42", 0x1fb6
"\x00\x1f\xb6\x00\x03\x45", 0x1fb7
"\x00\x03\x91\x00\x03\x06", 0x1fb8
"\x00\x03\x91\x00\x03\x04", 0x1fb9
"\x00\x03\x91\x00\x03\x00", 0x1fba
"\x00\x03\x91\x00\x03\x45", 0x1fbc
"\x00\x00\xa8\x00\x03\x42", 0x1fc1
"\x00\x1f\x74\x00\x03\x45", 0x1fc2
"\x00\x03\xb7\x00\x03\x45", 0x1fc3
"\x00\x03\xae\x00\x03\x45", 0x1fc4
"\x00\x03\xb7\x00\x03\x42", 0x1fc6
"\x00\x1f\xc6\x00\x03\x45", 0x1fc7
"\x00\x03\x95\x00\x03\x00", 0x1fc8
"\x00\x03\x97\x00\x03\x00", 0x1fca
"\x00\x03\x97\x00\x03\x45", 0x1fcc
"\x00\x1f\xbf\x00\x03\x00", 0x1fcd
"\x00\x1f\xbf\x00\x03\x01", 0x1fce
"\x00\x1f\xbf\x00\x03\x42", 0x1fcf
"\x00\x03\xb9\x00\x03\x06", 0x1fd0
"\x00\x03\xb9\x00\x03\x04", 0x1fd1
"\x00\x03\xca\x00\x03\x00", 0x1fd2
"\x00\x03\xb9\x00\x03\x42", 0x1fd6
"\x00\x03\xca\x00\x03\x42", 0x1fd7
"\x00\x03\x99\x00\x03\x06", 0x1fd8
"\x00\x03\x99\x00\x03\x04", 0x1fd9
"\x00\x03\x99\x00\x03\x00", 0x1fda
"\x00\x1f\xfe\x00\x03\x00", 0x1fdd
"\x00\x1f\xfe\x00\x03\x01", 0x1fde
"\x00\x1f\xfe\x00\x03\x42", 0x1fdf
"\x00\x03\xc5\x00\x03\x06", 0x1fe0
"\x00\x03\xc5\x00\x03\x04", 0x1fe1
"\x00\x03\xcb\x00\x03\x00", 0x1fe2
"\x00\x03\xc1\x00\x03\x13", 0x1fe4
"\x00\x03\xc1\x00\x03\x14", 0x1fe5
"\x00\x03\xc5\x00\x03\x42", 0x1fe6
"\x00\x03\xcb\x00\x03\x42", 0x1fe7
"\x00\x03\xa5\x00\x03\x06", 0x1fe8
"\x00\x03\xa5\x00\x03\x04", 0x1fe9
"\x00\x03\xa5\x00\x03\x00", 0x1fea
"\x00\x03\xa1\x00\x03\x14", 0x1fec
"\x00\x00\xa8\x00\x03\x00", 0x1fed
"\x00\x1f\x7c\x00\x03\x45", 0x1ff2
"\x00\x03\xc9\x00\x03\x45", 0x1ff3
"\x00\x03\xce\x00\x03\x45", 0x1ff4
"\x00\x03\xc9\x00\x03\x42", 0x1ff6
"\x00\x1f\xf6\x00\x03\x45", 0x1ff7
"\x00\x03\x9f\x00\x03\x00", 0x1ff8
"\x00\x03\xa9\x00\x03\x00", 0x1ffa
"\x00\x03\xa9\x00\x03\x45", 0x1ffc
"\x00\x21\x90\x00\x03\x38", 0x219a
"\x00\x21\x92\x00\x03\x38", 0x219b
"\x00\x21\x94\x00\x03\x38", 0x21ae
"\x00\x21\xd0\x00\x03\x38", 0x21cd
"\x00\x21\xd4\x00\x03\x38", 0x21ce
"\x00\x21\xd2\x00\x03\x38", 0x21cf
"\x00\x22\x03\x00\x03\x38", 0x2204
"\x00\x22\x08\x00\x03\x38", 0x2209
"\x00\x22\x0b\x00\x03\x38", 0x220c
"\x00\x22\x23\x00\x03\x38", 0x2224
"\x00\x22\x25\x00\x03\x38", 0x2226
"\x00\x22\x3c\x00\x03\x38", 0x2241
"\x00\x22\x43\x00\x03\x38", 0x2244
"\x00\x22\x45\x00\x03\x38", 0x2247
"\x00\x22\x48\x00\x03\x38", 0x2249
"\x00\x00\x3d\x00\x03\x38", 0x2260
"\x00\x22\x61\x00\x03\x38", 0x2262
"\x00\x22\x4d\x00\x03\x38", 0x226d
"\x00\x00\x3c\x00\x03\x38", 0x226e
"\x00\x00\x3e\x00\x03\x38", 0x226f
"\x00\x22\x64\x00\x03\x38", 0x2270
"\x00\x22\x65\x00\x03\x38", 0x2271
"\x00\x22\x72\x00\x03\x38", 0x2274
"\x00\x22\x73\x00\x03\x38", 0x2275
"\x00\x22\x76\x00\x03\x38", 0x2278
"\x00\x22\x77\x00\x03\x38", 0x2279
"\x00\x22\x7a\x00\x03\x38", 0x2280
"\x00\x22\x7b\x00\x03\x38", 0x2281
"\x00\x22\x82\x00\x03\x38", 0x2284
"\x00\x22\x83\x00\x03\x38", 0x2285
"\x00\x22\x86\x00\x03\x38", 0x2288
"\x00\x22\x87\x00\x03\x38", 0x2289
"\x00\x22\xa2\x00\x03\x38", 0x22ac
"\x00\x22\xa8\x00\x03\x38", 0x22ad
"\x00\x22\xa9\x00\x03\x38", 0x22ae
"\x00\x22\xab\x00\x03\x38", 0x22af
"\x00\x22\x7c\x00\x03\x38", 0x22e0
"\x00\x22\x7d\x00\x03\x38", 0x22e1
"\x00\x22\x91\x00\x03\x38", 0x22e2
"\x00\x22\x92\x00\x03\x38", 0x22e3
"\x00\x22\xb2\x00\x03\x38", 0x22ea
"\x00\x22\xb3\x00\x03\x38", 0x22eb
"\x00\x22\xb4\x00\x03\x38", 0x22ec
"\x00\x22\xb5\x00\x03\x38", 0x22ed
"\x00\x30\x4b\x00\x30\x99", 0x304c
"\x00\x30\x4d\x00\x30\x99", 0x304e
"\x00\x30\x4f\x00\x30\x99", 0x3050
"\x00\x30\x51\x00\x30\x99", 0x3052
"\x00\x30\x53\x00\x30\x99", 0x3054
"\x00\x30\x55\x00\x30\x99", 0x3056
"\x00\x30\x57\x00\x30\x99", 0x3058
"\x00\x30\x59\x00\x30\x99", 0x305a
"\x00\x30\x5b\x00\x30\x99", 0x305c
"\x00\x30\x5d\x00\x30\x99", 0x305e
"\x00\x30\x5f\x00\x30\x99", 0x3060
"\x00\x30\x61\x00\x30\x99", 0x3062
"\x00\x30\x64\x00\x30\x99", 0x3065
"\x00\x30\x66\x00\x30\x99", 0x3067
"\x00\x30\x68\x00\x30\x99", 0x3069
"\x00\x30\x6f\x00\x30\x99", 0x3070
"\x00\x30\x6f\x00\x30\x9a", 0x3071
"\x00\x30\x72\x00\x30\x99", 0x3073
"\x00\x30\x72\x00\x30\x9a", 0x3074
"\x00\x30\x75\x00\x30\x99", 0x3076
"\x00\x30\x75\x00\x30\x9a", 0x3077
"\x00\x30\x78\x00\x30\x99", 0x3079
"\x00\x30\x78\x00\x30\x9a", 0x307a
"\x00\x30\x7b\x00\x30\x99", 0x307c
"\x00\x30\x7b\x00\x30\x9a", 0x307d
"\x00\x30\x46\x00\x30\x99", 0x3094
"\x00\x30\x9d\x00\x30\x99", 0x309e
"\x00\x30\xab\x00\x30\x99", 0x30ac
"\x00\x30\xad\x00\x30\x99", 0x30ae
"\x00\x30\xaf\x00\x30\x99", 0x30b0
"\x00\x30\xb1\x00\x30\x99", 0x30b2
"\x00\x30\xb3\x00\x30\x99", 0x30b4
"\x00\x30\xb5\x00\x30\x99", 0x30b6
"\x00\x30\xb7\x00\x30\x99", 0x30b8
"\x00\x30\xb9\x00\x30\x99", 0x30ba
"\x00\x30\xbb\x00\x30\x99", 0x30bc
"\x00\x30\xbd\x00\x30\x99", 0x30be
"\x00\x30\xbf\x00\x30\x99", 0x30c0
"\x00\x30\xc1\x00\x30\x99", 0x30c2
"\x00\x30\xc4\x00\x30\x99", 0x30c5
"\x00\x30\xc6\x00\x30\x99", 0x30c7
"\x00\x30\xc8\x00\x30\x99", 0x30c9
"\x00\x30\xcf\x00\x30\x99", 0x30d0
"\x00\x30\xcf\x00\x30\x9a", 0x30d1
"\x00\x30\xd2\x00\x30\x99", 0x30d3
"\x00\x30\xd2\x00\x30\x9a", 0x30d4
"\x00\x30\xd5\x00\x30\x99", 0x30d6
"\x00\x30\xd5\x00\x30\x9a", 0x30d7
"\x00\x30\xd8\x00\x30\x99", 0x30d9
"\x00\x30\xd8\x00\x30\x9a", 0x30da
"\x00\x30\xdb\x00\x30\x99", 0x30dc
"\x00\x30\xdb\x00\x30\x9a", 0x30dd
"\x00\x30\xa6\x00\x30\x99", 0x30f4
"\x00\x30\xef\x00\x30\x99", 0x30f7
"\x00\x30\xf0\x00\x30\x99", 0x30f8
"\x00\x30\xf1\x00\x30\x99", 0x30f9
"\x00\x30\xf2\x00\x30\x99", 0x30fa
"\x00\x30\xfd\x00\x30\x99", 0x30fe
"\x01\x05\xd2\x00\x03\x07", 0x105c9
"\x01\x05\xda\x00\x03\x07", 0x105e4
"\x01\x10\x99\x01\x10\xba", 0x1109a
"\x01\x10\x9b\x01\x10\xba", 0x1109c
"\x01\x10\xa5\x01\x10\xba", 0x110ab
"\x01\x11\x31\x01\x11\x27", 0x1112e
"\x01\x11\x32\x01\x11\x27", 0x1112f
"\x01\x13\x47\x01\x13\x3e", 0x1134b
"\x01\x13\x47\x01\x13\x57", 0x1134c
"\x01\x13\x82\x01\x13\xc9", 0x11383
"\x01\x13\x84\x01\x13\xbb", 0x11385
"\x01\x13\x8b\x01\x13\xc2", 0x1138e
"\x01\x13\x90\x01\x13\xc9", 0x11391
"\x01\x13\xc2\x01\x13\xc2", 0x113c5
"\x01\x13\xc2\x01\x13\xb8", 0x113c7
"\x01\x13\xc2\x01\x13\xc9", 0x113c8
"\x01\x14\xb9\x01\x14\xba", 0x114bb
"\x01\x14\xb9\x01\x14\xb0", 0x114bc
"\x01\x14\xb9\x01\x14\xbd", 0x114be
"\x01\x15\xb8\x01\x15\xaf", 0x115ba
"\x01\x15\xb9\x01\x15\xaf", 0x115bb
"\x01\x19\x35\x01\x19\x30", 0x11938
"\x01\x61\x1e\x01\x61\x1e", 0x16121
"\x01\x61\x1e\x01\x61\x29", 0x16122
"\x01\x61\x1e\x01\x61\x1f", 0x16123
"\x01\x61\x29\x01\x61\x1f", 0x16124
"\x01\x61\x1e\x01\x61\x20", 0x16125
"\x01\x61\x21\x01\x61\x1f", 0x16126
"\x01\x61\x22\x01\x61\x1f", 0x16127
"\x01\x61\x21\x01\x61\x20", 0x16128
"\x01\x6d\x67\x01\x6d\x67", 0x16d68
"\x01\x6d\x63\x01\x6d\x67", 0x16d69
"\x01\x6d\x69\x01\x6d\x67", 0x16d6a

View File

@@ -1,46 +0,0 @@
/* Decomposition of Unicode strings.
Copyright (C) 2009-2024 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2009.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include <stddef.h>
#include "unitypes.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Variant of uc_decomposition that does not produce the 'tag'. */
extern int
uc_compat_decomposition (ucs4_t uc, ucs4_t *decomposition);
/* A Unicode character together with its canonical combining class. */
struct ucs4_with_ccc
{
ucs4_t code;
int ccc; /* range 0..255 */
};
/* Stable-sort an array of 'struct ucs4_with_ccc'. */
extern void
gl_uninorm_decompose_merge_sort_inplace (struct ucs4_with_ccc *src, size_t n,
struct ucs4_with_ccc *tmp);
#ifdef __cplusplus
}
#endif

View File

@@ -1,48 +0,0 @@
/* Decomposition of Unicode characters.
Copyright (C) 2001-2003, 2009-2024 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2009.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include "unitypes.h"
/* The decomposition table is made of two parts:
- A table containing the actual arrays of decomposed equivalents.
(This table is separate because the maximum length of a decomposition
is 18, much larger than the average length 1.497 of a decomposition).
- A 3-level table of indices into this array. */
#include "decomposition-table1.h"
static inline unsigned short
decomp_index (ucs4_t uc)
{
unsigned int index1 = uc >> decomp_header_0;
if (index1 < decomp_header_1)
{
int lookup1 = gl_uninorm_decomp_index_table.level1[index1];
if (lookup1 >= 0)
{
unsigned int index2 = (uc >> decomp_header_2) & decomp_header_3;
int lookup2 = gl_uninorm_decomp_index_table.level2[lookup1 + index2];
if (lookup2 >= 0)
{
unsigned int index3 = uc & decomp_header_4;
return gl_uninorm_decomp_index_table.level3[lookup2 + index3];
}
}
}
return (unsigned short)(-1);
}

View File

@@ -1,35 +0,0 @@
/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
/* Decomposition of Unicode characters. */
/* Generated automatically by gen-uni-tables.c for Unicode 16.0.0. */
/* Copyright (C) 2000-2024 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
extern const unsigned char gl_uninorm_decomp_chars_table[];
#define decomp_header_0 10
#define decomp_header_1 191
#define decomp_header_2 5
#define decomp_header_3 31
#define decomp_header_4 31
typedef struct
{
int level1[191];
int level2[30 << 5];
unsigned short level3[293 << 5];
}
decomp_index_table_t;
extern const decomp_index_table_t gl_uninorm_decomp_index_table;

File diff suppressed because it is too large Load Diff

View File

@@ -1,35 +0,0 @@
/* Normalization of Unicode strings.
Copyright (C) 2009-2024 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2009.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#include "unitypes.h"
/* Complete definition of normalization form descriptor. */
struct unicode_normalization_form
{
/* Bit mask containing meta-information.
This must be the first field. */
unsigned int description;
#define NF_IS_COMPAT_DECOMPOSING (1 << 0)
#define NF_IS_COMPOSING (1 << 1)
/* Function that decomposes a Unicode character. */
int (*decomposer) (ucs4_t uc, ucs4_t *decomposition);
/* Function that combines two Unicode characters, a starter and another
character. */
ucs4_t (*composer) (ucs4_t uc1, ucs4_t uc2);
/* Decomposing variant. */
const struct unicode_normalization_form *decomposing_variant;
};

View File

@@ -1,380 +0,0 @@
/* Decomposition and composition of Unicode strings.
Copyright (C) 2009-2024 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2009.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
UNIT *
FUNC (uninorm_t nf, const UNIT *s, size_t n,
UNIT *resultbuf, size_t *lengthp)
{
int (*decomposer) (ucs4_t uc, ucs4_t *decomposition) = nf->decomposer;
ucs4_t (*composer) (ucs4_t uc1, ucs4_t uc2) = nf->composer;
/* The result being accumulated. */
UNIT *result;
size_t length;
size_t allocated;
/* The buffer for sorting. */
#define SORTBUF_PREALLOCATED 64
struct ucs4_with_ccc sortbuf_preallocated[2 * SORTBUF_PREALLOCATED];
struct ucs4_with_ccc *sortbuf; /* array of size 2 * sortbuf_allocated */
size_t sortbuf_allocated;
size_t sortbuf_count;
/* Initialize the accumulator. */
if (resultbuf == NULL)
{
result = NULL;
allocated = 0;
}
else
{
result = resultbuf;
allocated = *lengthp;
}
length = 0;
/* Initialize the buffer for sorting. */
sortbuf = sortbuf_preallocated;
sortbuf_allocated = SORTBUF_PREALLOCATED;
sortbuf_count = 0;
{
const UNIT *s_end = s + n;
for (;;)
{
int count;
ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH];
int decomposed_count;
int i;
if (s < s_end)
{
/* Fetch the next character. */
count = U_MBTOUC_UNSAFE (&decomposed[0], s, s_end - s);
decomposed_count = 1;
/* Decompose it, recursively.
It would be possible to precompute the recursive decomposition
and store it in a table. But this would significantly increase
the size of the decomposition tables, because for example for
U+1FC1 the recursive canonical decomposition and the recursive
compatibility decomposition are different. */
{
int curr;
for (curr = 0; curr < decomposed_count; )
{
/* Invariant: decomposed[0..curr-1] is fully decomposed, i.e.
all elements are atomic. */
ucs4_t curr_decomposed[UC_DECOMPOSITION_MAX_LENGTH];
int curr_decomposed_count;
curr_decomposed_count = decomposer (decomposed[curr], curr_decomposed);
if (curr_decomposed_count >= 0)
{
/* Move curr_decomposed[0..curr_decomposed_count-1] over
decomposed[curr], making room. It's not worth using
memcpy() here, since the counts are so small. */
int shift = curr_decomposed_count - 1;
if (shift < 0)
abort ();
if (shift > 0)
{
int j;
decomposed_count += shift;
if (decomposed_count > UC_DECOMPOSITION_MAX_LENGTH)
abort ();
for (j = decomposed_count - 1 - shift; j > curr; j--)
decomposed[j + shift] = decomposed[j];
}
for (; shift >= 0; shift--)
decomposed[curr + shift] = curr_decomposed[shift];
}
else
{
/* decomposed[curr] is atomic. */
curr++;
}
}
}
}
else
{
count = 0;
decomposed_count = 0;
}
i = 0;
for (;;)
{
ucs4_t uc;
int ccc;
if (s < s_end)
{
/* Fetch the next character from the decomposition. */
if (i == decomposed_count)
break;
uc = decomposed[i];
ccc = uc_combining_class (uc);
}
else
{
/* End of string reached. */
uc = 0;
ccc = 0;
}
if (ccc == 0)
{
size_t j;
/* Apply the canonical ordering algorithm to the accumulated
sequence of characters. */
if (sortbuf_count > 1)
gl_uninorm_decompose_merge_sort_inplace (sortbuf, sortbuf_count,
sortbuf + sortbuf_count);
if (composer != NULL)
{
/* Attempt to combine decomposed characters, as specified
in the Unicode Standard Annex #15 "Unicode Normalization
Forms". We need to check
1. whether the first accumulated character is a
"starter" (i.e. has ccc = 0). This is usually the
case. But when the string starts with a
non-starter, the sortbuf also starts with a
non-starter. Btw, this check could also be
omitted, because the composition table has only
entries (code1, code2) for which code1 is a
starter; if the first accumulated character is not
a starter, no lookup will succeed.
2. If the sortbuf has more than one character, check
for each of these characters that are not "blocked"
from the starter (i.e. have a ccc that is higher
than the ccc of the previous character) whether it
can be combined with the first character.
3. If only one character is left in sortbuf, check
whether it can be combined with the next character
(also a starter). */
if (sortbuf_count > 0 && sortbuf[0].ccc == 0)
{
for (j = 1; j < sortbuf_count; )
{
if (sortbuf[j].ccc > sortbuf[j - 1].ccc)
{
ucs4_t combined =
composer (sortbuf[0].code, sortbuf[j].code);
if (combined)
{
size_t k;
sortbuf[0].code = combined;
/* sortbuf[0].ccc = 0, still valid. */
for (k = j + 1; k < sortbuf_count; k++)
sortbuf[k - 1] = sortbuf[k];
sortbuf_count--;
continue;
}
}
j++;
}
if (s < s_end && sortbuf_count == 1)
{
ucs4_t combined =
composer (sortbuf[0].code, uc);
if (combined)
{
uc = combined;
ccc = 0;
/* uc could be further combined with subsequent
characters. So don't put it into sortbuf[0] in
this round, only in the next round. */
sortbuf_count = 0;
}
}
}
}
for (j = 0; j < sortbuf_count; j++)
{
ucs4_t muc = sortbuf[j].code;
/* Append muc to the result accumulator. */
if (length < allocated)
{
int ret =
U_UCTOMB (result + length, muc, allocated - length);
if (ret == -1)
{
errno = EINVAL;
goto fail;
}
if (ret >= 0)
{
length += ret;
goto done_appending;
}
}
{
size_t old_allocated = allocated;
size_t new_allocated = 2 * old_allocated;
if (new_allocated < 64)
new_allocated = 64;
if (new_allocated < old_allocated) /* integer overflow? */
abort ();
{
UNIT *larger_result;
if (result == NULL)
{
larger_result =
(UNIT *) malloc (new_allocated * sizeof (UNIT));
if (larger_result == NULL)
{
errno = ENOMEM;
goto fail;
}
}
else if (result == resultbuf)
{
larger_result =
(UNIT *) malloc (new_allocated * sizeof (UNIT));
if (larger_result == NULL)
{
errno = ENOMEM;
goto fail;
}
U_CPY (larger_result, resultbuf, length);
}
else
{
larger_result =
(UNIT *) realloc (result, new_allocated * sizeof (UNIT));
if (larger_result == NULL)
{
errno = ENOMEM;
goto fail;
}
}
result = larger_result;
allocated = new_allocated;
{
int ret =
U_UCTOMB (result + length, muc, allocated - length);
if (ret == -1)
{
errno = EINVAL;
goto fail;
}
if (ret < 0)
abort ();
length += ret;
goto done_appending;
}
}
}
done_appending: ;
}
/* sortbuf is now empty. */
sortbuf_count = 0;
}
if (!(s < s_end))
/* End of string reached. */
break;
/* Append (uc, ccc) to sortbuf. */
if (sortbuf_count == sortbuf_allocated)
{
struct ucs4_with_ccc *new_sortbuf;
sortbuf_allocated = 2 * sortbuf_allocated;
if (sortbuf_allocated < sortbuf_count) /* integer overflow? */
abort ();
new_sortbuf =
(struct ucs4_with_ccc *) malloc (2 * sortbuf_allocated * sizeof (struct ucs4_with_ccc));
if (new_sortbuf == NULL)
{
errno = ENOMEM;
goto fail;
}
memcpy (new_sortbuf, sortbuf,
sortbuf_count * sizeof (struct ucs4_with_ccc));
if (sortbuf != sortbuf_preallocated)
free (sortbuf);
sortbuf = new_sortbuf;
}
sortbuf[sortbuf_count].code = uc;
sortbuf[sortbuf_count].ccc = ccc;
sortbuf_count++;
i++;
}
if (!(s < s_end))
/* End of string reached. */
break;
s += count;
}
}
if (length == 0)
{
if (result == NULL)
{
/* Return a non-NULL value. NULL means error. */
result = (UNIT *) malloc (1);
if (result == NULL)
{
errno = ENOMEM;
goto fail;
}
}
}
else if (result != resultbuf && length < allocated)
{
/* Shrink the allocated memory if possible. */
UNIT *memory;
memory = (UNIT *) realloc (result, length * sizeof (UNIT));
if (memory != NULL)
result = memory;
}
if (sortbuf_count > 0)
abort ();
if (sortbuf != sortbuf_preallocated)
free (sortbuf);
*lengthp = length;
return result;
fail:
{
int saved_errno = errno;
if (sortbuf != sortbuf_preallocated)
free (sortbuf);
if (result != resultbuf)
free (result);
errno = saved_errno;
}
return NULL;
}

View File

@@ -1,72 +0,0 @@
/* Normalization insensitive comparison of Unicode strings.
Copyright (C) 2009-2024 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2009.
This file is free software.
It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+".
You can redistribute it and/or modify it under either
- the terms of the GNU Lesser General Public License as published
by the Free Software Foundation, either version 3, or (at your
option) any later version, or
- the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version, or
- the same dual license "the GNU LGPLv3+ or the GNU GPLv2+".
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License and the GNU General Public License
for more details.
You should have received a copy of the GNU Lesser General Public
License and of the GNU General Public License along with this
program. If not, see <https://www.gnu.org/licenses/>. */
int
FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2,
uninorm_t nf, int *resultp)
{
UNIT buf1[2048 / sizeof (UNIT)];
UNIT buf2[2048 / sizeof (UNIT)];
UNIT *norms1;
size_t norms1_length;
UNIT *norms2;
size_t norms2_length;
int cmp;
/* Normalize S1. */
norms1_length = sizeof (buf1) / sizeof (UNIT);
norms1 = U_NORMALIZE (nf, s1, n1, buf1, &norms1_length);
if (norms1 == NULL)
/* errno is set here. */
return -1;
/* Normalize S2. */
norms2_length = sizeof (buf2) / sizeof (UNIT);
norms2 = U_NORMALIZE (nf, s2, n2, buf2, &norms2_length);
if (norms2 == NULL)
{
if (norms1 != buf1)
{
int saved_errno = errno;
free (norms1);
errno = saved_errno;
}
return -1;
}
/* Compare the normalized strings. */
cmp = U_CMP2 (norms1, norms1_length, norms2, norms2_length);
if (cmp > 0)
cmp = 1;
else if (cmp < 0)
cmp = -1;
if (norms2 != buf2)
free (norms2);
if (norms1 != buf1)
free (norms1);
*resultp = cmp;
return 0;
}

View File

@@ -1,73 +0,0 @@
/* Locale dependent, normalization insensitive comparison of Unicode strings.
Copyright (C) 2009-2024 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2009.
This file is free software.
It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+".
You can redistribute it and/or modify it under either
- the terms of the GNU Lesser General Public License as published
by the Free Software Foundation, either version 3, or (at your
option) any later version, or
- the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version, or
- the same dual license "the GNU LGPLv3+ or the GNU GPLv2+".
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License and the GNU General Public License
for more details.
You should have received a copy of the GNU Lesser General Public
License and of the GNU General Public License along with this
program. If not, see <https://www.gnu.org/licenses/>. */
int
FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2,
uninorm_t nf, int *resultp)
{
char buf1[2048];
char buf2[2048];
char *transformed1;
size_t transformed1_length;
char *transformed2;
size_t transformed2_length;
int cmp;
/* Normalize and transform S1. */
transformed1_length = sizeof (buf1);
transformed1 = U_NORMXFRM (s1, n1, nf, buf1, &transformed1_length);
if (transformed1 == NULL)
/* errno is set here. */
return -1;
/* Normalize and transform S2. */
transformed2_length = sizeof (buf2);
transformed2 = U_NORMXFRM (s2, n2, nf, buf2, &transformed2_length);
if (transformed2 == NULL)
{
if (transformed1 != buf1)
{
int saved_errno = errno;
free (transformed1);
errno = saved_errno;
}
return -1;
}
/* Compare the transformed strings. */
cmp = memcmp2 (transformed1, transformed1_length,
transformed2, transformed2_length);
if (cmp < 0)
cmp = -1;
else if (cmp > 0)
cmp = 1;
if (transformed2 != buf2)
free (transformed2);
if (transformed1 != buf1)
free (transformed1);
*resultp = cmp;
return 0;
}

View File

@@ -1,95 +0,0 @@
/* Locale dependent transformation for comparison of Unicode strings.
Copyright (C) 2009-2024 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2009.
This file is free software.
It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+".
You can redistribute it and/or modify it under either
- the terms of the GNU Lesser General Public License as published
by the Free Software Foundation, either version 3, or (at your
option) any later version, or
- the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version, or
- the same dual license "the GNU LGPLv3+ or the GNU GPLv2+".
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License and the GNU General Public License
for more details.
You should have received a copy of the GNU Lesser General Public
License and of the GNU General Public License along with this
program. If not, see <https://www.gnu.org/licenses/>. */
char *
FUNC (const UNIT *s, size_t n, uninorm_t nf,
char *resultbuf, size_t *lengthp)
{
UNIT normsbuf[2048 / sizeof (UNIT)];
UNIT *norms;
size_t norms_length;
char convsbuf[2048];
char *convs;
size_t convs_length;
char *result;
/* Normalize the Unicode string. */
norms_length = sizeof (normsbuf) / sizeof (UNIT);
norms = U_NORMALIZE (nf, s, n, normsbuf, &norms_length);
if (norms == NULL)
/* errno is set here. */
return NULL;
/* Convert it to locale encoding. */
convs_length = sizeof (convsbuf) - 1;
convs = U_CONV_TO_ENCODING (locale_charset (),
iconveh_error,
norms, norms_length,
NULL,
convsbuf, &convs_length);
if (convs == NULL)
{
if (norms != normsbuf)
{
int saved_errno = errno;
free (norms);
errno = saved_errno;
}
return NULL;
}
if (norms != normsbuf)
free (norms);
/* Ensure one more byte is available. */
if (convs != convsbuf)
{
char *memory = (char *) realloc (convs, convs_length + 1);
if (memory == NULL)
{
free (convs);
errno = ENOMEM;
return NULL;
}
convs = memory;
}
/* Apply locale dependent transformations for comparison. */
result = amemxfrm (convs, convs_length, resultbuf, lengthp);
if (result == NULL)
{
if (convs != convsbuf)
{
int saved_errno = errno;
free (convs);
errno = saved_errno;
}
return NULL;
}
if (convs != convsbuf)
free (convs);
return result;
}