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