unicode_build.ml (112868B)
1 2 let pr_utf8 = false 3 4 let encode_utf8 c = 5 if c < 0x80 then 6 String.make 1 (Char.chr c) 7 else if c < 0x800 then 8 let s = Bytes.create 2 in 9 s.[0] <- Char.chr (c lsr 6 + 0xC0); 10 s.[1] <- Char.chr (c land 0x3f + 0x80); 11 s 12 else if c < 0x10000 then 13 let s = Bytes.create 3 in 14 s.[0] <- Char.chr (c lsr 12 + 0xE0); 15 s.[1] <- Char.chr ((c lsr 6) land 0x3f + 0x80); 16 s.[2] <- Char.chr (c land 0x3f + 0x80); 17 s 18 else 19 let s = Bytes.create 4 in 20 s.[0] <- Char.chr (c lsr 18 + 0xF0); 21 s.[1] <- Char.chr ((c lsr 12) land 0x3f + 0x80); 22 s.[2] <- Char.chr ((c lsr 6) land 0x3f + 0x80); 23 s.[3] <- Char.chr (c land 0x3f + 0x80); 24 s 25 26 let print_uni ch c = 27 if pr_utf8 then 28 let s = encode_utf8 c in 29 Format.fprintf ch "%02x" (Char.code s.[0]); 30 for i = 1 to String.length s - 1 do 31 Format.fprintf ch ",%02x" (Char.code s.[i]); 32 done 33 else 34 Format.fprintf ch "%04x" c 35 36 (*let print_uni ch c = Format.fprintf ch "%s" (encode_utf8 c)*) 37 38 let rec print_chars ch s = 39 match s with 40 [] -> () 41 | [c] -> Format.fprintf ch "%a" print_uni c 42 | c :: r -> Format.fprintf ch "%a,%a" print_uni c print_chars r 43 44 (****) 45 46 module IntMap = Map.Make (struct type t = int let compare = compare end) 47 48 let convert m c = try IntMap.find c m with Not_found -> [c] 49 50 let convert_list m l = List.flatten (List.map (convert m) l) 51 52 let compose m m' = 53 IntMap.fold (fun k l m -> IntMap.add k (convert_list m l) m) m' m 54 55 let add m c l = 56 let l = if l = [0xffff] then [0] else l in 57 (* 58 Format.printf "%a -> %a@." print_uni c print_chars l; 59 *) 60 m := IntMap.add c l !m 61 62 let empty () = ref (IntMap.empty) 63 64 (****) 65 66 (**** From vfs_utfconvdata.h *) 67 68 let uniCharDecompositionTable = [| 69 0x00C0; 0x2000; 0x00C1; 0x2002; 0x00C2; 0x2004; 0x00C3; 0x2006; 70 0x00C4; 0x2008; 0x00C5; 0x200A; 0x00C7; 0x200C; 0x00C8; 0x200E; 71 0x00C9; 0x2010; 0x00CA; 0x2012; 0x00CB; 0x2014; 0x00CC; 0x2016; 72 0x00CD; 0x2018; 0x00CE; 0x201A; 0x00CF; 0x201C; 0x00D1; 0x201E; 73 0x00D2; 0x2020; 0x00D3; 0x2022; 0x00D4; 0x2024; 0x00D5; 0x2026; 74 0x00D6; 0x2028; 0x00D9; 0x202A; 0x00DA; 0x202C; 0x00DB; 0x202E; 75 0x00DC; 0x2030; 0x00DD; 0x2032; 0x00E0; 0x2034; 0x00E1; 0x2036; 76 0x00E2; 0x2038; 0x00E3; 0x203A; 0x00E4; 0x203C; 0x00E5; 0x203E; 77 0x00E7; 0x2040; 0x00E8; 0x2042; 0x00E9; 0x2044; 0x00EA; 0x2046; 78 0x00EB; 0x2048; 0x00EC; 0x204A; 0x00ED; 0x204C; 0x00EE; 0x204E; 79 0x00EF; 0x2050; 0x00F1; 0x2052; 0x00F2; 0x2054; 0x00F3; 0x2056; 80 0x00F4; 0x2058; 0x00F5; 0x205A; 0x00F6; 0x205C; 0x00F9; 0x205E; 81 0x00FA; 0x2060; 0x00FB; 0x2062; 0x00FC; 0x2064; 0x00FD; 0x2066; 82 0x00FF; 0x2068; 0x0100; 0x206A; 0x0101; 0x206C; 0x0102; 0x206E; 83 0x0103; 0x2070; 0x0104; 0x2072; 0x0105; 0x2074; 0x0106; 0x2076; 84 0x0107; 0x2078; 0x0108; 0x207A; 0x0109; 0x207C; 0x010A; 0x207E; 85 0x010B; 0x2080; 0x010C; 0x2082; 0x010D; 0x2084; 0x010E; 0x2086; 86 0x010F; 0x2088; 0x0112; 0x208A; 0x0113; 0x208C; 0x0114; 0x208E; 87 0x0115; 0x2090; 0x0116; 0x2092; 0x0117; 0x2094; 0x0118; 0x2096; 88 0x0119; 0x2098; 0x011A; 0x209A; 0x011B; 0x209C; 0x011C; 0x209E; 89 0x011D; 0x20A0; 0x011E; 0x20A2; 0x011F; 0x20A4; 0x0120; 0x20A6; 90 0x0121; 0x20A8; 0x0122; 0x20AA; 0x0123; 0x20AC; 0x0124; 0x20AE; 91 0x0125; 0x20B0; 0x0128; 0x20B2; 0x0129; 0x20B4; 0x012A; 0x20B6; 92 0x012B; 0x20B8; 0x012C; 0x20BA; 0x012D; 0x20BC; 0x012E; 0x20BE; 93 0x012F; 0x20C0; 0x0130; 0x20C2; 0x0134; 0x20C4; 0x0135; 0x20C6; 94 0x0136; 0x20C8; 0x0137; 0x20CA; 0x0139; 0x20CC; 0x013A; 0x20CE; 95 0x013B; 0x20D0; 0x013C; 0x20D2; 0x013D; 0x20D4; 0x013E; 0x20D6; 96 0x0143; 0x20D8; 0x0144; 0x20DA; 0x0145; 0x20DC; 0x0146; 0x20DE; 97 0x0147; 0x20E0; 0x0148; 0x20E2; 0x014C; 0x20E4; 0x014D; 0x20E6; 98 0x014E; 0x20E8; 0x014F; 0x20EA; 0x0150; 0x20EC; 0x0151; 0x20EE; 99 0x0154; 0x20F0; 0x0155; 0x20F2; 0x0156; 0x20F4; 0x0157; 0x20F6; 100 0x0158; 0x20F8; 0x0159; 0x20FA; 0x015A; 0x20FC; 0x015B; 0x20FE; 101 0x015C; 0x2100; 0x015D; 0x2102; 0x015E; 0x2104; 0x015F; 0x2106; 102 0x0160; 0x2108; 0x0161; 0x210A; 0x0162; 0x210C; 0x0163; 0x210E; 103 0x0164; 0x2110; 0x0165; 0x2112; 0x0168; 0x2114; 0x0169; 0x2116; 104 0x016A; 0x2118; 0x016B; 0x211A; 0x016C; 0x211C; 0x016D; 0x211E; 105 0x016E; 0x2120; 0x016F; 0x2122; 0x0170; 0x2124; 0x0171; 0x2126; 106 0x0172; 0x2128; 0x0173; 0x212A; 0x0174; 0x212C; 0x0175; 0x212E; 107 0x0176; 0x2130; 0x0177; 0x2132; 0x0178; 0x2134; 0x0179; 0x2136; 108 0x017A; 0x2138; 0x017B; 0x213A; 0x017C; 0x213C; 0x017D; 0x213E; 109 0x017E; 0x2140; 0x01A0; 0x2142; 0x01A1; 0x2144; 0x01AF; 0x2146; 110 0x01B0; 0x2148; 0x01CD; 0x214A; 0x01CE; 0x214C; 0x01CF; 0x214E; 111 0x01D0; 0x2150; 0x01D1; 0x2152; 0x01D2; 0x2154; 0x01D3; 0x2156; 112 0x01D4; 0x2158; 0x01D5; 0xA15A; 0x01D6; 0xA15C; 0x01D7; 0xA15E; 113 0x01D8; 0xA160; 0x01D9; 0xA162; 0x01DA; 0xA164; 0x01DB; 0xA166; 114 0x01DC; 0xA168; 0x01DE; 0xA16A; 0x01DF; 0xA16C; 0x01E0; 0xA16E; 115 0x01E1; 0xA170; 0x01E2; 0x2172; 0x01E3; 0x2174; 0x01E6; 0x2176; 116 0x01E7; 0x2178; 0x01E8; 0x217A; 0x01E9; 0x217C; 0x01EA; 0x217E; 117 0x01EB; 0x2180; 0x01EC; 0xA182; 0x01ED; 0xA184; 0x01EE; 0x2186; 118 0x01EF; 0x2188; 0x01F0; 0x218A; 0x01F4; 0x218C; 0x01F5; 0x218E; 119 0x01F8; 0x2190; 0x01F9; 0x2192; 0x01FA; 0xA194; 0x01FB; 0xA196; 120 0x01FC; 0x2198; 0x01FD; 0x219A; 0x01FE; 0x219C; 0x01FF; 0x219E; 121 0x0200; 0x21A0; 0x0201; 0x21A2; 0x0202; 0x21A4; 0x0203; 0x21A6; 122 0x0204; 0x21A8; 0x0205; 0x21AA; 0x0206; 0x21AC; 0x0207; 0x21AE; 123 0x0208; 0x21B0; 0x0209; 0x21B2; 0x020A; 0x21B4; 0x020B; 0x21B6; 124 0x020C; 0x21B8; 0x020D; 0x21BA; 0x020E; 0x21BC; 0x020F; 0x21BE; 125 0x0210; 0x21C0; 0x0211; 0x21C2; 0x0212; 0x21C4; 0x0213; 0x21C6; 126 0x0214; 0x21C8; 0x0215; 0x21CA; 0x0216; 0x21CC; 0x0217; 0x21CE; 127 0x0218; 0x21D0; 0x0219; 0x21D2; 0x021A; 0x21D4; 0x021B; 0x21D6; 128 0x021E; 0x21D8; 0x021F; 0x21DA; 0x0226; 0x21DC; 0x0227; 0x21DE; 129 0x0228; 0x21E0; 0x0229; 0x21E2; 0x022A; 0xA1E4; 0x022B; 0xA1E6; 130 0x022C; 0xA1E8; 0x022D; 0xA1EA; 0x022E; 0x21EC; 0x022F; 0x21EE; 131 0x0230; 0xA1F0; 0x0231; 0xA1F2; 0x0232; 0x21F4; 0x0233; 0x21F6; 132 0x0340; 0x1300; 0x0341; 0x1301; 0x0343; 0x1313; 0x0344; 0x21F8; 133 0x0374; 0x12B9; 0x037E; 0x103B; 0x0385; 0x21FA; 0x0386; 0x21FC; 134 0x0387; 0x10B7; 0x0388; 0x21FE; 0x0389; 0x2200; 0x038A; 0x2202; 135 0x038C; 0x2204; 0x038E; 0x2206; 0x038F; 0x2208; 0x0390; 0xA20A; 136 0x03AA; 0x220C; 0x03AB; 0x220E; 0x03AC; 0x2210; 0x03AD; 0x2212; 137 0x03AE; 0x2214; 0x03AF; 0x2216; 0x03B0; 0xA218; 0x03CA; 0x221A; 138 0x03CB; 0x221C; 0x03CC; 0x221E; 0x03CD; 0x2220; 0x03CE; 0x2222; 139 0x03D3; 0x2224; 0x03D4; 0x2226; 0x0400; 0x2228; 0x0401; 0x222A; 140 0x0403; 0x222C; 0x0407; 0x222E; 0x040C; 0x2230; 0x040D; 0x2232; 141 0x040E; 0x2234; 0x0419; 0x2236; 0x0439; 0x2238; 0x0450; 0x223A; 142 0x0451; 0x223C; 0x0453; 0x223E; 0x0457; 0x2240; 0x045C; 0x2242; 143 0x045D; 0x2244; 0x045E; 0x2246; 0x0476; 0x2248; 0x0477; 0x224A; 144 0x04C1; 0x224C; 0x04C2; 0x224E; 0x04D0; 0x2250; 0x04D1; 0x2252; 145 0x04D2; 0x2254; 0x04D3; 0x2256; 0x04D6; 0x2258; 0x04D7; 0x225A; 146 0x04DA; 0x225C; 0x04DB; 0x225E; 0x04DC; 0x2260; 0x04DD; 0x2262; 147 0x04DE; 0x2264; 0x04DF; 0x2266; 0x04E2; 0x2268; 0x04E3; 0x226A; 148 0x04E4; 0x226C; 0x04E5; 0x226E; 0x04E6; 0x2270; 0x04E7; 0x2272; 149 0x04EA; 0x2274; 0x04EB; 0x2276; 0x04EC; 0x2278; 0x04ED; 0x227A; 150 0x04EE; 0x227C; 0x04EF; 0x227E; 0x04F0; 0x2280; 0x04F1; 0x2282; 151 0x04F2; 0x2284; 0x04F3; 0x2286; 0x04F4; 0x2288; 0x04F5; 0x228A; 152 0x04F8; 0x228C; 0x04F9; 0x228E; 0x0622; 0x2290; 0x0623; 0x2292; 153 0x0624; 0x2294; 0x0625; 0x2296; 0x0626; 0x2298; 0x06C0; 0x229A; 154 0x06C2; 0x229C; 0x06D3; 0x229E; 0x0929; 0x22A0; 0x0931; 0x22A2; 155 0x0934; 0x22A4; 0x0958; 0x22A6; 0x0959; 0x22A8; 0x095A; 0x22AA; 156 0x095B; 0x22AC; 0x095C; 0x22AE; 0x095D; 0x22B0; 0x095E; 0x22B2; 157 0x095F; 0x22B4; 0x09CB; 0x22B6; 0x09CC; 0x22B8; 0x09DC; 0x22BA; 158 0x09DD; 0x22BC; 0x09DF; 0x22BE; 0x0A33; 0x22C0; 0x0A36; 0x22C2; 159 0x0A59; 0x22C4; 0x0A5A; 0x22C6; 0x0A5B; 0x22C8; 0x0A5E; 0x22CA; 160 0x0B48; 0x22CC; 0x0B4B; 0x22CE; 0x0B4C; 0x22D0; 0x0B5C; 0x22D2; 161 0x0B5D; 0x22D4; 0x0B94; 0x22D6; 0x0BCA; 0x22D8; 0x0BCB; 0x22DA; 162 0x0BCC; 0x22DC; 0x0C48; 0x22DE; 0x0CC0; 0x22E0; 0x0CC7; 0x22E2; 163 0x0CC8; 0x22E4; 0x0CCA; 0x22E6; 0x0CCB; 0xA2E8; 0x0D4A; 0x22EA; 164 0x0D4B; 0x22EC; 0x0D4C; 0x22EE; 0x0DDA; 0x22F0; 0x0DDC; 0x22F2; 165 0x0DDD; 0xA2F4; 0x0DDE; 0x22F6; 0x0F43; 0x22F8; 0x0F4D; 0x22FA; 166 0x0F52; 0x22FC; 0x0F57; 0x22FE; 0x0F5C; 0x2300; 0x0F69; 0x2302; 167 0x0F73; 0x2304; 0x0F75; 0x2306; 0x0F76; 0x2308; 0x0F78; 0x230A; 168 0x0F81; 0x230C; 0x0F93; 0x230E; 0x0F9D; 0x2310; 0x0FA2; 0x2312; 169 0x0FA7; 0x2314; 0x0FAC; 0x2316; 0x0FB9; 0x2318; 0x1026; 0x231A; 170 0x1E00; 0x231C; 0x1E01; 0x231E; 0x1E02; 0x2320; 0x1E03; 0x2322; 171 0x1E04; 0x2324; 0x1E05; 0x2326; 0x1E06; 0x2328; 0x1E07; 0x232A; 172 0x1E08; 0xA32C; 0x1E09; 0xA32E; 0x1E0A; 0x2330; 0x1E0B; 0x2332; 173 0x1E0C; 0x2334; 0x1E0D; 0x2336; 0x1E0E; 0x2338; 0x1E0F; 0x233A; 174 0x1E10; 0x233C; 0x1E11; 0x233E; 0x1E12; 0x2340; 0x1E13; 0x2342; 175 0x1E14; 0xA344; 0x1E15; 0xA346; 0x1E16; 0xA348; 0x1E17; 0xA34A; 176 0x1E18; 0x234C; 0x1E19; 0x234E; 0x1E1A; 0x2350; 0x1E1B; 0x2352; 177 0x1E1C; 0xA354; 0x1E1D; 0xA356; 0x1E1E; 0x2358; 0x1E1F; 0x235A; 178 0x1E20; 0x235C; 0x1E21; 0x235E; 0x1E22; 0x2360; 0x1E23; 0x2362; 179 0x1E24; 0x2364; 0x1E25; 0x2366; 0x1E26; 0x2368; 0x1E27; 0x236A; 180 0x1E28; 0x236C; 0x1E29; 0x236E; 0x1E2A; 0x2370; 0x1E2B; 0x2372; 181 0x1E2C; 0x2374; 0x1E2D; 0x2376; 0x1E2E; 0xA378; 0x1E2F; 0xA37A; 182 0x1E30; 0x237C; 0x1E31; 0x237E; 0x1E32; 0x2380; 0x1E33; 0x2382; 183 0x1E34; 0x2384; 0x1E35; 0x2386; 0x1E36; 0x2388; 0x1E37; 0x238A; 184 0x1E38; 0xA38C; 0x1E39; 0xA38E; 0x1E3A; 0x2390; 0x1E3B; 0x2392; 185 0x1E3C; 0x2394; 0x1E3D; 0x2396; 0x1E3E; 0x2398; 0x1E3F; 0x239A; 186 0x1E40; 0x239C; 0x1E41; 0x239E; 0x1E42; 0x23A0; 0x1E43; 0x23A2; 187 0x1E44; 0x23A4; 0x1E45; 0x23A6; 0x1E46; 0x23A8; 0x1E47; 0x23AA; 188 0x1E48; 0x23AC; 0x1E49; 0x23AE; 0x1E4A; 0x23B0; 0x1E4B; 0x23B2; 189 0x1E4C; 0xA3B4; 0x1E4D; 0xA3B6; 0x1E4E; 0xA3B8; 0x1E4F; 0xA3BA; 190 0x1E50; 0xA3BC; 0x1E51; 0xA3BE; 0x1E52; 0xA3C0; 0x1E53; 0xA3C2; 191 0x1E54; 0x23C4; 0x1E55; 0x23C6; 0x1E56; 0x23C8; 0x1E57; 0x23CA; 192 0x1E58; 0x23CC; 0x1E59; 0x23CE; 0x1E5A; 0x23D0; 0x1E5B; 0x23D2; 193 0x1E5C; 0xA3D4; 0x1E5D; 0xA3D6; 0x1E5E; 0x23D8; 0x1E5F; 0x23DA; 194 0x1E60; 0x23DC; 0x1E61; 0x23DE; 0x1E62; 0x23E0; 0x1E63; 0x23E2; 195 0x1E64; 0xA3E4; 0x1E65; 0xA3E6; 0x1E66; 0xA3E8; 0x1E67; 0xA3EA; 196 0x1E68; 0xA3EC; 0x1E69; 0xA3EE; 0x1E6A; 0x23F0; 0x1E6B; 0x23F2; 197 0x1E6C; 0x23F4; 0x1E6D; 0x23F6; 0x1E6E; 0x23F8; 0x1E6F; 0x23FA; 198 0x1E70; 0x23FC; 0x1E71; 0x23FE; 0x1E72; 0x2400; 0x1E73; 0x2402; 199 0x1E74; 0x2404; 0x1E75; 0x2406; 0x1E76; 0x2408; 0x1E77; 0x240A; 200 0x1E78; 0xA40C; 0x1E79; 0xA40E; 0x1E7A; 0xA410; 0x1E7B; 0xA412; 201 0x1E7C; 0x2414; 0x1E7D; 0x2416; 0x1E7E; 0x2418; 0x1E7F; 0x241A; 202 0x1E80; 0x241C; 0x1E81; 0x241E; 0x1E82; 0x2420; 0x1E83; 0x2422; 203 0x1E84; 0x2424; 0x1E85; 0x2426; 0x1E86; 0x2428; 0x1E87; 0x242A; 204 0x1E88; 0x242C; 0x1E89; 0x242E; 0x1E8A; 0x2430; 0x1E8B; 0x2432; 205 0x1E8C; 0x2434; 0x1E8D; 0x2436; 0x1E8E; 0x2438; 0x1E8F; 0x243A; 206 0x1E90; 0x243C; 0x1E91; 0x243E; 0x1E92; 0x2440; 0x1E93; 0x2442; 207 0x1E94; 0x2444; 0x1E95; 0x2446; 0x1E96; 0x2448; 0x1E97; 0x244A; 208 0x1E98; 0x244C; 0x1E99; 0x244E; 0x1E9B; 0x2450; 0x1EA0; 0x2452; 209 0x1EA1; 0x2454; 0x1EA2; 0x2456; 0x1EA3; 0x2458; 0x1EA4; 0xA45A; 210 0x1EA5; 0xA45C; 0x1EA6; 0xA45E; 0x1EA7; 0xA460; 0x1EA8; 0xA462; 211 0x1EA9; 0xA464; 0x1EAA; 0xA466; 0x1EAB; 0xA468; 0x1EAC; 0xA46A; 212 0x1EAD; 0xA46C; 0x1EAE; 0xA46E; 0x1EAF; 0xA470; 0x1EB0; 0xA472; 213 0x1EB1; 0xA474; 0x1EB2; 0xA476; 0x1EB3; 0xA478; 0x1EB4; 0xA47A; 214 0x1EB5; 0xA47C; 0x1EB6; 0xA47E; 0x1EB7; 0xA480; 0x1EB8; 0x2482; 215 0x1EB9; 0x2484; 0x1EBA; 0x2486; 0x1EBB; 0x2488; 0x1EBC; 0x248A; 216 0x1EBD; 0x248C; 0x1EBE; 0xA48E; 0x1EBF; 0xA490; 0x1EC0; 0xA492; 217 0x1EC1; 0xA494; 0x1EC2; 0xA496; 0x1EC3; 0xA498; 0x1EC4; 0xA49A; 218 0x1EC5; 0xA49C; 0x1EC6; 0xA49E; 0x1EC7; 0xA4A0; 0x1EC8; 0x24A2; 219 0x1EC9; 0x24A4; 0x1ECA; 0x24A6; 0x1ECB; 0x24A8; 0x1ECC; 0x24AA; 220 0x1ECD; 0x24AC; 0x1ECE; 0x24AE; 0x1ECF; 0x24B0; 0x1ED0; 0xA4B2; 221 0x1ED1; 0xA4B4; 0x1ED2; 0xA4B6; 0x1ED3; 0xA4B8; 0x1ED4; 0xA4BA; 222 0x1ED5; 0xA4BC; 0x1ED6; 0xA4BE; 0x1ED7; 0xA4C0; 0x1ED8; 0xA4C2; 223 0x1ED9; 0xA4C4; 0x1EDA; 0xA4C6; 0x1EDB; 0xA4C8; 0x1EDC; 0xA4CA; 224 0x1EDD; 0xA4CC; 0x1EDE; 0xA4CE; 0x1EDF; 0xA4D0; 0x1EE0; 0xA4D2; 225 0x1EE1; 0xA4D4; 0x1EE2; 0xA4D6; 0x1EE3; 0xA4D8; 0x1EE4; 0x24DA; 226 0x1EE5; 0x24DC; 0x1EE6; 0x24DE; 0x1EE7; 0x24E0; 0x1EE8; 0xA4E2; 227 0x1EE9; 0xA4E4; 0x1EEA; 0xA4E6; 0x1EEB; 0xA4E8; 0x1EEC; 0xA4EA; 228 0x1EED; 0xA4EC; 0x1EEE; 0xA4EE; 0x1EEF; 0xA4F0; 0x1EF0; 0xA4F2; 229 0x1EF1; 0xA4F4; 0x1EF2; 0x24F6; 0x1EF3; 0x24F8; 0x1EF4; 0x24FA; 230 0x1EF5; 0x24FC; 0x1EF6; 0x24FE; 0x1EF7; 0x2500; 0x1EF8; 0x2502; 231 0x1EF9; 0x2504; 0x1F00; 0x2506; 0x1F01; 0x2508; 0x1F02; 0xA50A; 232 0x1F03; 0xA50C; 0x1F04; 0xA50E; 0x1F05; 0xA510; 0x1F06; 0xA512; 233 0x1F07; 0xA514; 0x1F08; 0x2516; 0x1F09; 0x2518; 0x1F0A; 0xA51A; 234 0x1F0B; 0xA51C; 0x1F0C; 0xA51E; 0x1F0D; 0xA520; 0x1F0E; 0xA522; 235 0x1F0F; 0xA524; 0x1F10; 0x2526; 0x1F11; 0x2528; 0x1F12; 0xA52A; 236 0x1F13; 0xA52C; 0x1F14; 0xA52E; 0x1F15; 0xA530; 0x1F18; 0x2532; 237 0x1F19; 0x2534; 0x1F1A; 0xA536; 0x1F1B; 0xA538; 0x1F1C; 0xA53A; 238 0x1F1D; 0xA53C; 0x1F20; 0x253E; 0x1F21; 0x2540; 0x1F22; 0xA542; 239 0x1F23; 0xA544; 0x1F24; 0xA546; 0x1F25; 0xA548; 0x1F26; 0xA54A; 240 0x1F27; 0xA54C; 0x1F28; 0x254E; 0x1F29; 0x2550; 0x1F2A; 0xA552; 241 0x1F2B; 0xA554; 0x1F2C; 0xA556; 0x1F2D; 0xA558; 0x1F2E; 0xA55A; 242 0x1F2F; 0xA55C; 0x1F30; 0x255E; 0x1F31; 0x2560; 0x1F32; 0xA562; 243 0x1F33; 0xA564; 0x1F34; 0xA566; 0x1F35; 0xA568; 0x1F36; 0xA56A; 244 0x1F37; 0xA56C; 0x1F38; 0x256E; 0x1F39; 0x2570; 0x1F3A; 0xA572; 245 0x1F3B; 0xA574; 0x1F3C; 0xA576; 0x1F3D; 0xA578; 0x1F3E; 0xA57A; 246 0x1F3F; 0xA57C; 0x1F40; 0x257E; 0x1F41; 0x2580; 0x1F42; 0xA582; 247 0x1F43; 0xA584; 0x1F44; 0xA586; 0x1F45; 0xA588; 0x1F48; 0x258A; 248 0x1F49; 0x258C; 0x1F4A; 0xA58E; 0x1F4B; 0xA590; 0x1F4C; 0xA592; 249 0x1F4D; 0xA594; 0x1F50; 0x2596; 0x1F51; 0x2598; 0x1F52; 0xA59A; 250 0x1F53; 0xA59C; 0x1F54; 0xA59E; 0x1F55; 0xA5A0; 0x1F56; 0xA5A2; 251 0x1F57; 0xA5A4; 0x1F59; 0x25A6; 0x1F5B; 0xA5A8; 0x1F5D; 0xA5AA; 252 0x1F5F; 0xA5AC; 0x1F60; 0x25AE; 0x1F61; 0x25B0; 0x1F62; 0xA5B2; 253 0x1F63; 0xA5B4; 0x1F64; 0xA5B6; 0x1F65; 0xA5B8; 0x1F66; 0xA5BA; 254 0x1F67; 0xA5BC; 0x1F68; 0x25BE; 0x1F69; 0x25C0; 0x1F6A; 0xA5C2; 255 0x1F6B; 0xA5C4; 0x1F6C; 0xA5C6; 0x1F6D; 0xA5C8; 0x1F6E; 0xA5CA; 256 0x1F6F; 0xA5CC; 0x1F70; 0x25CE; 0x1F71; 0x93AC; 0x1F72; 0x25D0; 257 0x1F73; 0x93AD; 0x1F74; 0x25D2; 0x1F75; 0x93AE; 0x1F76; 0x25D4; 258 0x1F77; 0x93AF; 0x1F78; 0x25D6; 0x1F79; 0x93CC; 0x1F7A; 0x25D8; 259 0x1F7B; 0x93CD; 0x1F7C; 0x25DA; 0x1F7D; 0x93CE; 0x1F80; 0xA5DC; 260 0x1F81; 0xA5DE; 0x1F82; 0xA5E0; 0x1F83; 0xA5E2; 0x1F84; 0xA5E4; 261 0x1F85; 0xA5E6; 0x1F86; 0xA5E8; 0x1F87; 0xA5EA; 0x1F88; 0xA5EC; 262 0x1F89; 0xA5EE; 0x1F8A; 0xA5F0; 0x1F8B; 0xA5F2; 0x1F8C; 0xA5F4; 263 0x1F8D; 0xA5F6; 0x1F8E; 0xA5F8; 0x1F8F; 0xA5FA; 0x1F90; 0xA5FC; 264 0x1F91; 0xA5FE; 0x1F92; 0xA600; 0x1F93; 0xA602; 0x1F94; 0xA604; 265 0x1F95; 0xA606; 0x1F96; 0xA608; 0x1F97; 0xA60A; 0x1F98; 0xA60C; 266 0x1F99; 0xA60E; 0x1F9A; 0xA610; 0x1F9B; 0xA612; 0x1F9C; 0xA614; 267 0x1F9D; 0xA616; 0x1F9E; 0xA618; 0x1F9F; 0xA61A; 0x1FA0; 0xA61C; 268 0x1FA1; 0xA61E; 0x1FA2; 0xA620; 0x1FA3; 0xA622; 0x1FA4; 0xA624; 269 0x1FA5; 0xA626; 0x1FA6; 0xA628; 0x1FA7; 0xA62A; 0x1FA8; 0xA62C; 270 0x1FA9; 0xA62E; 0x1FAA; 0xA630; 0x1FAB; 0xA632; 0x1FAC; 0xA634; 271 0x1FAD; 0xA636; 0x1FAE; 0xA638; 0x1FAF; 0xA63A; 0x1FB0; 0x263C; 272 0x1FB1; 0x263E; 0x1FB2; 0xA640; 0x1FB3; 0x2642; 0x1FB4; 0xA644; 273 0x1FB6; 0x2646; 0x1FB7; 0xA648; 0x1FB8; 0x264A; 0x1FB9; 0x264C; 274 0x1FBA; 0x264E; 0x1FBB; 0x9386; 0x1FBC; 0x2650; 0x1FBE; 0x13B9; 275 0x1FC1; 0x2652; 0x1FC2; 0xA654; 0x1FC3; 0x2656; 0x1FC4; 0xA658; 276 0x1FC6; 0x265A; 0x1FC7; 0xA65C; 0x1FC8; 0x265E; 0x1FC9; 0x9388; 277 0x1FCA; 0x2660; 0x1FCB; 0x9389; 0x1FCC; 0x2662; 0x1FCD; 0x2664; 278 0x1FCE; 0x2666; 0x1FCF; 0x2668; 0x1FD0; 0x266A; 0x1FD1; 0x266C; 279 0x1FD2; 0xA66E; 0x1FD3; 0x9390; 0x1FD6; 0x2670; 0x1FD7; 0xA672; 280 0x1FD8; 0x2674; 0x1FD9; 0x2676; 0x1FDA; 0x2678; 0x1FDB; 0x938A; 281 0x1FDD; 0x267A; 0x1FDE; 0x267C; 0x1FDF; 0x267E; 0x1FE0; 0x2680; 282 0x1FE1; 0x2682; 0x1FE2; 0xA684; 0x1FE3; 0x93B0; 0x1FE4; 0x2686; 283 0x1FE5; 0x2688; 0x1FE6; 0x268A; 0x1FE7; 0xA68C; 0x1FE8; 0x268E; 284 0x1FE9; 0x2690; 0x1FEA; 0x2692; 0x1FEB; 0x938E; 0x1FEC; 0x2694; 285 0x1FED; 0x2696; 0x1FEE; 0x9385; 0x1FEF; 0x1060; 0x1FF2; 0xA698; 286 0x1FF3; 0x269A; 0x1FF4; 0xA69C; 0x1FF6; 0x269E; 0x1FF7; 0xA6A0; 287 0x1FF8; 0x26A2; 0x1FF9; 0x938C; 0x1FFA; 0x26A4; 0x1FFB; 0x938F; 288 0x1FFC; 0x26A6; 0x1FFD; 0x10B4; 0x304C; 0x26A8; 0x304E; 0x26AA; 289 0x3050; 0x26AC; 0x3052; 0x26AE; 0x3054; 0x26B0; 0x3056; 0x26B2; 290 0x3058; 0x26B4; 0x305A; 0x26B6; 0x305C; 0x26B8; 0x305E; 0x26BA; 291 0x3060; 0x26BC; 0x3062; 0x26BE; 0x3065; 0x26C0; 0x3067; 0x26C2; 292 0x3069; 0x26C4; 0x3070; 0x26C6; 0x3071; 0x26C8; 0x3073; 0x26CA; 293 0x3074; 0x26CC; 0x3076; 0x26CE; 0x3077; 0x26D0; 0x3079; 0x26D2; 294 0x307A; 0x26D4; 0x307C; 0x26D6; 0x307D; 0x26D8; 0x3094; 0x26DA; 295 0x309E; 0x26DC; 0x30AC; 0x26DE; 0x30AE; 0x26E0; 0x30B0; 0x26E2; 296 0x30B2; 0x26E4; 0x30B4; 0x26E6; 0x30B6; 0x26E8; 0x30B8; 0x26EA; 297 0x30BA; 0x26EC; 0x30BC; 0x26EE; 0x30BE; 0x26F0; 0x30C0; 0x26F2; 298 0x30C2; 0x26F4; 0x30C5; 0x26F6; 0x30C7; 0x26F8; 0x30C9; 0x26FA; 299 0x30D0; 0x26FC; 0x30D1; 0x26FE; 0x30D3; 0x2700; 0x30D4; 0x2702; 300 0x30D6; 0x2704; 0x30D7; 0x2706; 0x30D9; 0x2708; 0x30DA; 0x270A; 301 0x30DC; 0x270C; 0x30DD; 0x270E; 0x30F4; 0x2710; 0x30F7; 0x2712; 302 0x30F8; 0x2714; 0x30F9; 0x2716; 0x30FA; 0x2718; 0x30FE; 0x271A; 303 0xFB1D; 0x271C; 0xFB1F; 0x271E; 0xFB2A; 0x2720; 0xFB2B; 0x2722; 304 0xFB2C; 0xA724; 0xFB2D; 0xA726; 0xFB2E; 0x2728; 0xFB2F; 0x272A; 305 0xFB30; 0x272C; 0xFB31; 0x272E; 0xFB32; 0x2730; 0xFB33; 0x2732; 306 0xFB34; 0x2734; 0xFB35; 0x2736; 0xFB36; 0x2738; 0xFB38; 0x273A; 307 0xFB39; 0x273C; 0xFB3A; 0x273E; 0xFB3B; 0x2740; 0xFB3C; 0x2742; 308 0xFB3E; 0x2744; 0xFB40; 0x2746; 0xFB41; 0x2748; 0xFB43; 0x274A; 309 0xFB44; 0x274C; 0xFB46; 0x274E; 0xFB47; 0x2750; 0xFB48; 0x2752; 310 0xFB49; 0x2754; 0xFB4A; 0x2756; 0xFB4B; 0x2758; 0xFB4C; 0x275A; 311 0xFB4D; 0x275C; 0xFB4E; 0x275E 312 |] 313 314 let uniCharMultipleDecompositionTable = [| 315 0x0041; 0x0300; 0x0041; 0x0301; 0x0041; 0x0302; 0x0041; 0x0303; 316 0x0041; 0x0308; 0x0041; 0x030A; 0x0043; 0x0327; 0x0045; 0x0300; 317 0x0045; 0x0301; 0x0045; 0x0302; 0x0045; 0x0308; 0x0049; 0x0300; 318 0x0049; 0x0301; 0x0049; 0x0302; 0x0049; 0x0308; 0x004E; 0x0303; 319 0x004F; 0x0300; 0x004F; 0x0301; 0x004F; 0x0302; 0x004F; 0x0303; 320 0x004F; 0x0308; 0x0055; 0x0300; 0x0055; 0x0301; 0x0055; 0x0302; 321 0x0055; 0x0308; 0x0059; 0x0301; 0x0061; 0x0300; 0x0061; 0x0301; 322 0x0061; 0x0302; 0x0061; 0x0303; 0x0061; 0x0308; 0x0061; 0x030A; 323 0x0063; 0x0327; 0x0065; 0x0300; 0x0065; 0x0301; 0x0065; 0x0302; 324 0x0065; 0x0308; 0x0069; 0x0300; 0x0069; 0x0301; 0x0069; 0x0302; 325 0x0069; 0x0308; 0x006E; 0x0303; 0x006F; 0x0300; 0x006F; 0x0301; 326 0x006F; 0x0302; 0x006F; 0x0303; 0x006F; 0x0308; 0x0075; 0x0300; 327 0x0075; 0x0301; 0x0075; 0x0302; 0x0075; 0x0308; 0x0079; 0x0301; 328 0x0079; 0x0308; 0x0041; 0x0304; 0x0061; 0x0304; 0x0041; 0x0306; 329 0x0061; 0x0306; 0x0041; 0x0328; 0x0061; 0x0328; 0x0043; 0x0301; 330 0x0063; 0x0301; 0x0043; 0x0302; 0x0063; 0x0302; 0x0043; 0x0307; 331 0x0063; 0x0307; 0x0043; 0x030C; 0x0063; 0x030C; 0x0044; 0x030C; 332 0x0064; 0x030C; 0x0045; 0x0304; 0x0065; 0x0304; 0x0045; 0x0306; 333 0x0065; 0x0306; 0x0045; 0x0307; 0x0065; 0x0307; 0x0045; 0x0328; 334 0x0065; 0x0328; 0x0045; 0x030C; 0x0065; 0x030C; 0x0047; 0x0302; 335 0x0067; 0x0302; 0x0047; 0x0306; 0x0067; 0x0306; 0x0047; 0x0307; 336 0x0067; 0x0307; 0x0047; 0x0327; 0x0067; 0x0327; 0x0048; 0x0302; 337 0x0068; 0x0302; 0x0049; 0x0303; 0x0069; 0x0303; 0x0049; 0x0304; 338 0x0069; 0x0304; 0x0049; 0x0306; 0x0069; 0x0306; 0x0049; 0x0328; 339 0x0069; 0x0328; 0x0049; 0x0307; 0x004A; 0x0302; 0x006A; 0x0302; 340 0x004B; 0x0327; 0x006B; 0x0327; 0x004C; 0x0301; 0x006C; 0x0301; 341 0x004C; 0x0327; 0x006C; 0x0327; 0x004C; 0x030C; 0x006C; 0x030C; 342 0x004E; 0x0301; 0x006E; 0x0301; 0x004E; 0x0327; 0x006E; 0x0327; 343 0x004E; 0x030C; 0x006E; 0x030C; 0x004F; 0x0304; 0x006F; 0x0304; 344 0x004F; 0x0306; 0x006F; 0x0306; 0x004F; 0x030B; 0x006F; 0x030B; 345 0x0052; 0x0301; 0x0072; 0x0301; 0x0052; 0x0327; 0x0072; 0x0327; 346 0x0052; 0x030C; 0x0072; 0x030C; 0x0053; 0x0301; 0x0073; 0x0301; 347 0x0053; 0x0302; 0x0073; 0x0302; 0x0053; 0x0327; 0x0073; 0x0327; 348 0x0053; 0x030C; 0x0073; 0x030C; 0x0054; 0x0327; 0x0074; 0x0327; 349 0x0054; 0x030C; 0x0074; 0x030C; 0x0055; 0x0303; 0x0075; 0x0303; 350 0x0055; 0x0304; 0x0075; 0x0304; 0x0055; 0x0306; 0x0075; 0x0306; 351 0x0055; 0x030A; 0x0075; 0x030A; 0x0055; 0x030B; 0x0075; 0x030B; 352 0x0055; 0x0328; 0x0075; 0x0328; 0x0057; 0x0302; 0x0077; 0x0302; 353 0x0059; 0x0302; 0x0079; 0x0302; 0x0059; 0x0308; 0x005A; 0x0301; 354 0x007A; 0x0301; 0x005A; 0x0307; 0x007A; 0x0307; 0x005A; 0x030C; 355 0x007a; 0x030C; 0x004F; 0x031B; 0x006F; 0x031B; 0x0055; 0x031B; 356 0x0075; 0x031B; 0x0041; 0x030C; 0x0061; 0x030C; 0x0049; 0x030C; 357 0x0069; 0x030C; 0x004F; 0x030C; 0x006F; 0x030C; 0x0055; 0x030C; 358 0x0075; 0x030C; 0x00DC; 0x0304; 0x00FC; 0x0304; 0x00DC; 0x0301; 359 0x00FC; 0x0301; 0x00DC; 0x030C; 0x00FC; 0x030C; 0x00DC; 0x0300; 360 0x00FC; 0x0300; 0x00C4; 0x0304; 0x00E4; 0x0304; 0x0226; 0x0304; 361 0x0227; 0x0304; 0x00C6; 0x0304; 0x00E6; 0x0304; 0x0047; 0x030C; 362 0x0067; 0x030C; 0x004B; 0x030C; 0x006B; 0x030C; 0x004F; 0x0328; 363 0x006F; 0x0328; 0x01EA; 0x0304; 0x01EB; 0x0304; 0x01B7; 0x030C; 364 0x0292; 0x030C; 0x006A; 0x030C; 0x0047; 0x0301; 0x0067; 0x0301; 365 0x004E; 0x0300; 0x006E; 0x0300; 0x00C5; 0x0301; 0x00E5; 0x0301; 366 0x00C6; 0x0301; 0x00E6; 0x0301; 0x00D8; 0x0301; 0x00F8; 0x0301; 367 0x0041; 0x030F; 0x0061; 0x030F; 0x0041; 0x0311; 0x0061; 0x0311; 368 0x0045; 0x030F; 0x0065; 0x030F; 0x0045; 0x0311; 0x0065; 0x0311; 369 0x0049; 0x030F; 0x0069; 0x030F; 0x0049; 0x0311; 0x0069; 0x0311; 370 0x004F; 0x030F; 0x006F; 0x030F; 0x004F; 0x0311; 0x006F; 0x0311; 371 0x0052; 0x030F; 0x0072; 0x030F; 0x0052; 0x0311; 0x0072; 0x0311; 372 0x0055; 0x030F; 0x0075; 0x030F; 0x0055; 0x0311; 0x0075; 0x0311; 373 0x0053; 0x0326; 0x0073; 0x0326; 0x0054; 0x0326; 0x0074; 0x0326; 374 0x0048; 0x030C; 0x0068; 0x030C; 0x0041; 0x0307; 0x0061; 0x0307; 375 0x0045; 0x0327; 0x0065; 0x0327; 0x00D6; 0x0304; 0x00F6; 0x0304; 376 0x00D5; 0x0304; 0x00F5; 0x0304; 0x004F; 0x0307; 0x006F; 0x0307; 377 0x022E; 0x0304; 0x022F; 0x0304; 0x0059; 0x0304; 0x0079; 0x0304; 378 0x0308; 0x0301; 0x00A8; 0x0301; 0x0391; 0x0301; 0x0395; 0x0301; 379 0x0397; 0x0301; 0x0399; 0x0301; 0x039F; 0x0301; 0x03A5; 0x0301; 380 0x03A9; 0x0301; 0x03CA; 0x0301; 0x0399; 0x0308; 0x03A5; 0x0308; 381 0x03B1; 0x0301; 0x03B5; 0x0301; 0x03B7; 0x0301; 0x03B9; 0x0301; 382 0x03CB; 0x0301; 0x03B9; 0x0308; 0x03C5; 0x0308; 0x03BF; 0x0301; 383 0x03C5; 0x0301; 0x03C9; 0x0301; 0x03D2; 0x0301; 0x03D2; 0x0308; 384 0x0415; 0x0300; 0x0415; 0x0308; 0x0413; 0x0301; 0x0406; 0x0308; 385 0x041A; 0x0301; 0x0418; 0x0300; 0x0423; 0x0306; 0x0418; 0x0306; 386 0x0438; 0x0306; 0x0435; 0x0300; 0x0435; 0x0308; 0x0433; 0x0301; 387 0x0456; 0x0308; 0x043A; 0x0301; 0x0438; 0x0300; 0x0443; 0x0306; 388 0x0474; 0x030F; 0x0475; 0x030F; 0x0416; 0x0306; 0x0436; 0x0306; 389 0x0410; 0x0306; 0x0430; 0x0306; 0x0410; 0x0308; 0x0430; 0x0308; 390 0x0415; 0x0306; 0x0435; 0x0306; 0x04D8; 0x0308; 0x04D9; 0x0308; 391 0x0416; 0x0308; 0x0436; 0x0308; 0x0417; 0x0308; 0x0437; 0x0308; 392 0x0418; 0x0304; 0x0438; 0x0304; 0x0418; 0x0308; 0x0438; 0x0308; 393 0x041E; 0x0308; 0x043E; 0x0308; 0x04E8; 0x0308; 0x04E9; 0x0308; 394 0x042D; 0x0308; 0x044D; 0x0308; 0x0423; 0x0304; 0x0443; 0x0304; 395 0x0423; 0x0308; 0x0443; 0x0308; 0x0423; 0x030B; 0x0443; 0x030B; 396 0x0427; 0x0308; 0x0447; 0x0308; 0x042B; 0x0308; 0x044B; 0x0308; 397 0x0627; 0x0653; 0x0627; 0x0654; 0x0648; 0x0654; 0x0627; 0x0655; 398 0x064A; 0x0654; 0x06D5; 0x0654; 0x06C1; 0x0654; 0x06D2; 0x0654; 399 0x0928; 0x093C; 0x0930; 0x093C; 0x0933; 0x093C; 0x0915; 0x093C; 400 0x0916; 0x093C; 0x0917; 0x093C; 0x091C; 0x093C; 0x0921; 0x093C; 401 0x0922; 0x093C; 0x092B; 0x093C; 0x092F; 0x093C; 0x09C7; 0x09BE; 402 0x09C7; 0x09D7; 0x09A1; 0x09BC; 0x09A2; 0x09BC; 0x09AF; 0x09BC; 403 0x0A32; 0x0A3C; 0x0A38; 0x0A3C; 0x0A16; 0x0A3C; 0x0A17; 0x0A3C; 404 0x0A1C; 0x0A3C; 0x0A2B; 0x0A3C; 0x0B47; 0x0B56; 0x0B47; 0x0B3E; 405 0x0B47; 0x0B57; 0x0B21; 0x0B3C; 0x0B22; 0x0B3C; 0x0B92; 0x0BD7; 406 0x0BC6; 0x0BBE; 0x0BC7; 0x0BBE; 0x0BC6; 0x0BD7; 0x0C46; 0x0C56; 407 0x0CBF; 0x0CD5; 0x0CC6; 0x0CD5; 0x0CC6; 0x0CD6; 0x0CC6; 0x0CC2; 408 0x0CCA; 0x0CD5; 0x0D46; 0x0D3E; 0x0D47; 0x0D3E; 0x0D46; 0x0D57; 409 0x0DD9; 0x0DCA; 0x0DD9; 0x0DCF; 0x0DDC; 0x0DCA; 0x0DD9; 0x0DDF; 410 0x0F42; 0x0FB7; 0x0F4C; 0x0FB7; 0x0F51; 0x0FB7; 0x0F56; 0x0FB7; 411 0x0F5B; 0x0FB7; 0x0F40; 0x0FB5; 0x0F71; 0x0F72; 0x0F71; 0x0F74; 412 0x0FB2; 0x0F80; 0x0FB3; 0x0F80; 0x0F71; 0x0F80; 0x0F92; 0x0FB7; 413 0x0F9C; 0x0FB7; 0x0FA1; 0x0FB7; 0x0FA6; 0x0FB7; 0x0FAB; 0x0FB7; 414 0x0F90; 0x0FB5; 0x1025; 0x102E; 0x0041; 0x0325; 0x0061; 0x0325; 415 0x0042; 0x0307; 0x0062; 0x0307; 0x0042; 0x0323; 0x0062; 0x0323; 416 0x0042; 0x0331; 0x0062; 0x0331; 0x00C7; 0x0301; 0x00E7; 0x0301; 417 0x0044; 0x0307; 0x0064; 0x0307; 0x0044; 0x0323; 0x0064; 0x0323; 418 0x0044; 0x0331; 0x0064; 0x0331; 0x0044; 0x0327; 0x0064; 0x0327; 419 0x0044; 0x032D; 0x0064; 0x032D; 0x0112; 0x0300; 0x0113; 0x0300; 420 0x0112; 0x0301; 0x0113; 0x0301; 0x0045; 0x032D; 0x0065; 0x032D; 421 0x0045; 0x0330; 0x0065; 0x0330; 0x0228; 0x0306; 0x0229; 0x0306; 422 0x0046; 0x0307; 0x0066; 0x0307; 0x0047; 0x0304; 0x0067; 0x0304; 423 0x0048; 0x0307; 0x0068; 0x0307; 0x0048; 0x0323; 0x0068; 0x0323; 424 0x0048; 0x0308; 0x0068; 0x0308; 0x0048; 0x0327; 0x0068; 0x0327; 425 0x0048; 0x032E; 0x0068; 0x032E; 0x0049; 0x0330; 0x0069; 0x0330; 426 0x00CF; 0x0301; 0x00EF; 0x0301; 0x004B; 0x0301; 0x006B; 0x0301; 427 0x004B; 0x0323; 0x006B; 0x0323; 0x004B; 0x0331; 0x006B; 0x0331; 428 0x004C; 0x0323; 0x006C; 0x0323; 0x1E36; 0x0304; 0x1E37; 0x0304; 429 0x004C; 0x0331; 0x006C; 0x0331; 0x004C; 0x032D; 0x006C; 0x032D; 430 0x004D; 0x0301; 0x006D; 0x0301; 0x004D; 0x0307; 0x006D; 0x0307; 431 0x004D; 0x0323; 0x006D; 0x0323; 0x004E; 0x0307; 0x006E; 0x0307; 432 0x004E; 0x0323; 0x006E; 0x0323; 0x004E; 0x0331; 0x006E; 0x0331; 433 0x004E; 0x032D; 0x006E; 0x032D; 0x00D5; 0x0301; 0x00F5; 0x0301; 434 0x00D5; 0x0308; 0x00F5; 0x0308; 0x014C; 0x0300; 0x014D; 0x0300; 435 0x014C; 0x0301; 0x014D; 0x0301; 0x0050; 0x0301; 0x0070; 0x0301; 436 0x0050; 0x0307; 0x0070; 0x0307; 0x0052; 0x0307; 0x0072; 0x0307; 437 0x0052; 0x0323; 0x0072; 0x0323; 0x1E5A; 0x0304; 0x1E5B; 0x0304; 438 0x0052; 0x0331; 0x0072; 0x0331; 0x0053; 0x0307; 0x0073; 0x0307; 439 0x0053; 0x0323; 0x0073; 0x0323; 0x015A; 0x0307; 0x015B; 0x0307; 440 0x0160; 0x0307; 0x0161; 0x0307; 0x1E62; 0x0307; 0x1E63; 0x0307; 441 0x0054; 0x0307; 0x0074; 0x0307; 0x0054; 0x0323; 0x0074; 0x0323; 442 0x0054; 0x0331; 0x0074; 0x0331; 0x0054; 0x032D; 0x0074; 0x032D; 443 0x0055; 0x0324; 0x0075; 0x0324; 0x0055; 0x0330; 0x0075; 0x0330; 444 0x0055; 0x032D; 0x0075; 0x032D; 0x0168; 0x0301; 0x0169; 0x0301; 445 0x016A; 0x0308; 0x016B; 0x0308; 0x0056; 0x0303; 0x0076; 0x0303; 446 0x0056; 0x0323; 0x0076; 0x0323; 0x0057; 0x0300; 0x0077; 0x0300; 447 0x0057; 0x0301; 0x0077; 0x0301; 0x0057; 0x0308; 0x0077; 0x0308; 448 0x0057; 0x0307; 0x0077; 0x0307; 0x0057; 0x0323; 0x0077; 0x0323; 449 0x0058; 0x0307; 0x0078; 0x0307; 0x0058; 0x0308; 0x0078; 0x0308; 450 0x0059; 0x0307; 0x0079; 0x0307; 0x005A; 0x0302; 0x007A; 0x0302; 451 0x005A; 0x0323; 0x007A; 0x0323; 0x005A; 0x0331; 0x007A; 0x0331; 452 0x0068; 0x0331; 0x0074; 0x0308; 0x0077; 0x030A; 0x0079; 0x030A; 453 0x017F; 0x0307; 0x0041; 0x0323; 0x0061; 0x0323; 0x0041; 0x0309; 454 0x0061; 0x0309; 0x00C2; 0x0301; 0x00E2; 0x0301; 0x00C2; 0x0300; 455 0x00E2; 0x0300; 0x00C2; 0x0309; 0x00E2; 0x0309; 0x00C2; 0x0303; 456 0x00E2; 0x0303; 0x1EA0; 0x0302; 0x1EA1; 0x0302; 0x0102; 0x0301; 457 0x0103; 0x0301; 0x0102; 0x0300; 0x0103; 0x0300; 0x0102; 0x0309; 458 0x0103; 0x0309; 0x0102; 0x0303; 0x0103; 0x0303; 0x1EA0; 0x0306; 459 0x1EA1; 0x0306; 0x0045; 0x0323; 0x0065; 0x0323; 0x0045; 0x0309; 460 0x0065; 0x0309; 0x0045; 0x0303; 0x0065; 0x0303; 0x00CA; 0x0301; 461 0x00EA; 0x0301; 0x00CA; 0x0300; 0x00EA; 0x0300; 0x00CA; 0x0309; 462 0x00EA; 0x0309; 0x00CA; 0x0303; 0x00EA; 0x0303; 0x1EB8; 0x0302; 463 0x1EB9; 0x0302; 0x0049; 0x0309; 0x0069; 0x0309; 0x0049; 0x0323; 464 0x0069; 0x0323; 0x004F; 0x0323; 0x006F; 0x0323; 0x004F; 0x0309; 465 0x006F; 0x0309; 0x00D4; 0x0301; 0x00F4; 0x0301; 0x00D4; 0x0300; 466 0x00F4; 0x0300; 0x00D4; 0x0309; 0x00F4; 0x0309; 0x00D4; 0x0303; 467 0x00F4; 0x0303; 0x1ECC; 0x0302; 0x1ECD; 0x0302; 0x01A0; 0x0301; 468 0x01A1; 0x0301; 0x01A0; 0x0300; 0x01A1; 0x0300; 0x01A0; 0x0309; 469 0x01A1; 0x0309; 0x01A0; 0x0303; 0x01A1; 0x0303; 0x01A0; 0x0323; 470 0x01A1; 0x0323; 0x0055; 0x0323; 0x0075; 0x0323; 0x0055; 0x0309; 471 0x0075; 0x0309; 0x01AF; 0x0301; 0x01B0; 0x0301; 0x01AF; 0x0300; 472 0x01B0; 0x0300; 0x01AF; 0x0309; 0x01B0; 0x0309; 0x01AF; 0x0303; 473 0x01B0; 0x0303; 0x01AF; 0x0323; 0x01B0; 0x0323; 0x0059; 0x0300; 474 0x0079; 0x0300; 0x0059; 0x0323; 0x0079; 0x0323; 0x0059; 0x0309; 475 0x0079; 0x0309; 0x0059; 0x0303; 0x0079; 0x0303; 0x03B1; 0x0313; 476 0x03B1; 0x0314; 0x1F00; 0x0300; 0x1F01; 0x0300; 0x1F00; 0x0301; 477 0x1F01; 0x0301; 0x1F00; 0x0342; 0x1F01; 0x0342; 0x0391; 0x0313; 478 0x0391; 0x0314; 0x1F08; 0x0300; 0x1F09; 0x0300; 0x1F08; 0x0301; 479 0x1F09; 0x0301; 0x1F08; 0x0342; 0x1F09; 0x0342; 0x03B5; 0x0313; 480 0x03B5; 0x0314; 0x1F10; 0x0300; 0x1F11; 0x0300; 0x1F10; 0x0301; 481 0x1F11; 0x0301; 0x0395; 0x0313; 0x0395; 0x0314; 0x1F18; 0x0300; 482 0x1F19; 0x0300; 0x1F18; 0x0301; 0x1F19; 0x0301; 0x03B7; 0x0313; 483 0x03B7; 0x0314; 0x1F20; 0x0300; 0x1F21; 0x0300; 0x1F20; 0x0301; 484 0x1F21; 0x0301; 0x1F20; 0x0342; 0x1F21; 0x0342; 0x0397; 0x0313; 485 0x0397; 0x0314; 0x1F28; 0x0300; 0x1F29; 0x0300; 0x1F28; 0x0301; 486 0x1F29; 0x0301; 0x1F28; 0x0342; 0x1F29; 0x0342; 0x03B9; 0x0313; 487 0x03B9; 0x0314; 0x1F30; 0x0300; 0x1F31; 0x0300; 0x1F30; 0x0301; 488 0x1F31; 0x0301; 0x1F30; 0x0342; 0x1F31; 0x0342; 0x0399; 0x0313; 489 0x0399; 0x0314; 0x1F38; 0x0300; 0x1F39; 0x0300; 0x1F38; 0x0301; 490 0x1F39; 0x0301; 0x1F38; 0x0342; 0x1F39; 0x0342; 0x03BF; 0x0313; 491 0x03BF; 0x0314; 0x1F40; 0x0300; 0x1F41; 0x0300; 0x1F40; 0x0301; 492 0x1F41; 0x0301; 0x039F; 0x0313; 0x039F; 0x0314; 0x1F48; 0x0300; 493 0x1F49; 0x0300; 0x1F48; 0x0301; 0x1F49; 0x0301; 0x03C5; 0x0313; 494 0x03C5; 0x0314; 0x1F50; 0x0300; 0x1F51; 0x0300; 0x1F50; 0x0301; 495 0x1F51; 0x0301; 0x1F50; 0x0342; 0x1F51; 0x0342; 0x03A5; 0x0314; 496 0x1F59; 0x0300; 0x1F59; 0x0301; 0x1F59; 0x0342; 0x03C9; 0x0313; 497 0x03C9; 0x0314; 0x1F60; 0x0300; 0x1F61; 0x0300; 0x1F60; 0x0301; 498 0x1F61; 0x0301; 0x1F60; 0x0342; 0x1F61; 0x0342; 0x03A9; 0x0313; 499 0x03A9; 0x0314; 0x1F68; 0x0300; 0x1F69; 0x0300; 0x1F68; 0x0301; 500 0x1F69; 0x0301; 0x1F68; 0x0342; 0x1F69; 0x0342; 0x03B1; 0x0300; 501 0x03B5; 0x0300; 0x03B7; 0x0300; 0x03B9; 0x0300; 0x03BF; 0x0300; 502 0x03C5; 0x0300; 0x03C9; 0x0300; 0x1F00; 0x0345; 0x1F01; 0x0345; 503 0x1F02; 0x0345; 0x1F03; 0x0345; 0x1F04; 0x0345; 0x1F05; 0x0345; 504 0x1F06; 0x0345; 0x1F07; 0x0345; 0x1F08; 0x0345; 0x1F09; 0x0345; 505 0x1F0A; 0x0345; 0x1F0B; 0x0345; 0x1F0C; 0x0345; 0x1F0D; 0x0345; 506 0x1F0E; 0x0345; 0x1F0F; 0x0345; 0x1F20; 0x0345; 0x1F21; 0x0345; 507 0x1F22; 0x0345; 0x1F23; 0x0345; 0x1F24; 0x0345; 0x1F25; 0x0345; 508 0x1F26; 0x0345; 0x1F27; 0x0345; 0x1F28; 0x0345; 0x1F29; 0x0345; 509 0x1F2A; 0x0345; 0x1F2B; 0x0345; 0x1F2C; 0x0345; 0x1F2D; 0x0345; 510 0x1F2E; 0x0345; 0x1F2F; 0x0345; 0x1F60; 0x0345; 0x1F61; 0x0345; 511 0x1F62; 0x0345; 0x1F63; 0x0345; 0x1F64; 0x0345; 0x1F65; 0x0345; 512 0x1F66; 0x0345; 0x1F67; 0x0345; 0x1F68; 0x0345; 0x1F69; 0x0345; 513 0x1F6A; 0x0345; 0x1F6B; 0x0345; 0x1F6C; 0x0345; 0x1F6D; 0x0345; 514 0x1F6E; 0x0345; 0x1F6F; 0x0345; 0x03B1; 0x0306; 0x03B1; 0x0304; 515 0x1F70; 0x0345; 0x03B1; 0x0345; 0x03AC; 0x0345; 0x03B1; 0x0342; 516 0x1FB6; 0x0345; 0x0391; 0x0306; 0x0391; 0x0304; 0x0391; 0x0300; 517 0x0391; 0x0345; 0x00A8; 0x0342; 0x1F74; 0x0345; 0x03B7; 0x0345; 518 0x03AE; 0x0345; 0x03B7; 0x0342; 0x1FC6; 0x0345; 0x0395; 0x0300; 519 0x0397; 0x0300; 0x0397; 0x0345; 0x1FBF; 0x0300; 0x1FBF; 0x0301; 520 0x1FBF; 0x0342; 0x03B9; 0x0306; 0x03B9; 0x0304; 0x03CA; 0x0300; 521 0x03B9; 0x0342; 0x03CA; 0x0342; 0x0399; 0x0306; 0x0399; 0x0304; 522 0x0399; 0x0300; 0x1FFE; 0x0300; 0x1FFE; 0x0301; 0x1FFE; 0x0342; 523 0x03C5; 0x0306; 0x03C5; 0x0304; 0x03CB; 0x0300; 0x03C1; 0x0313; 524 0x03C1; 0x0314; 0x03C5; 0x0342; 0x03CB; 0x0342; 0x03A5; 0x0306; 525 0x03A5; 0x0304; 0x03A5; 0x0300; 0x03A1; 0x0314; 0x00A8; 0x0300; 526 0x1F7C; 0x0345; 0x03C9; 0x0345; 0x03CE; 0x0345; 0x03C9; 0x0342; 527 0x1FF6; 0x0345; 0x039F; 0x0300; 0x03A9; 0x0300; 0x03A9; 0x0345; 528 0x304B; 0x3099; 0x304D; 0x3099; 0x304F; 0x3099; 0x3051; 0x3099; 529 0x3053; 0x3099; 0x3055; 0x3099; 0x3057; 0x3099; 0x3059; 0x3099; 530 0x305B; 0x3099; 0x305D; 0x3099; 0x305F; 0x3099; 0x3061; 0x3099; 531 0x3064; 0x3099; 0x3066; 0x3099; 0x3068; 0x3099; 0x306F; 0x3099; 532 0x306F; 0x309A; 0x3072; 0x3099; 0x3072; 0x309A; 0x3075; 0x3099; 533 0x3075; 0x309A; 0x3078; 0x3099; 0x3078; 0x309A; 0x307B; 0x3099; 534 0x307B; 0x309A; 0x3046; 0x3099; 0x309D; 0x3099; 0x30AB; 0x3099; 535 0x30AD; 0x3099; 0x30AF; 0x3099; 0x30B1; 0x3099; 0x30B3; 0x3099; 536 0x30B5; 0x3099; 0x30B7; 0x3099; 0x30B9; 0x3099; 0x30BB; 0x3099; 537 0x30BD; 0x3099; 0x30BF; 0x3099; 0x30C1; 0x3099; 0x30C4; 0x3099; 538 0x30C6; 0x3099; 0x30C8; 0x3099; 0x30CF; 0x3099; 0x30CF; 0x309A; 539 0x30D2; 0x3099; 0x30D2; 0x309A; 0x30D5; 0x3099; 0x30D5; 0x309A; 540 0x30D8; 0x3099; 0x30D8; 0x309A; 0x30DB; 0x3099; 0x30DB; 0x309A; 541 0x30A6; 0x3099; 0x30EF; 0x3099; 0x30F0; 0x3099; 0x30F1; 0x3099; 542 0x30F2; 0x3099; 0x30FD; 0x3099; 0x05D9; 0x05B4; 0x05F2; 0x05B7; 543 0x05E9; 0x05C1; 0x05E9; 0x05C2; 0xFB49; 0x05C1; 0xFB49; 0x05C2; 544 0x05D0; 0x05B7; 0x05D0; 0x05B8; 0x05D0; 0x05BC; 0x05D1; 0x05BC; 545 0x05D2; 0x05BC; 0x05D3; 0x05BC; 0x05D4; 0x05BC; 0x05D5; 0x05BC; 546 0x05D6; 0x05BC; 0x05D8; 0x05BC; 0x05D9; 0x05BC; 0x05DA; 0x05BC; 547 0x05DB; 0x05BC; 0x05DC; 0x05BC; 0x05DE; 0x05BC; 0x05E0; 0x05BC; 548 0x05E1; 0x05BC; 0x05E3; 0x05BC; 0x05E4; 0x05BC; 0x05E6; 0x05BC; 549 0x05E7; 0x05BC; 0x05E8; 0x05BC; 0x05E9; 0x05BC; 0x05EA; 0x05BC; 550 0x05D5; 0x05B9; 0x05D1; 0x05BF; 0x05DB; 0x05BF; 0x05E4; 0x05BF 551 |] 552 553 let uniCharDecomposableBitmap = [| 554 0x01; 0x02; 0x03; 0x04; 0x05; 0x00; 0x06; 0x00; 555 0x00; 0x07; 0x08; 0x09; 0x0A; 0x0B; 0x00; 0x0C; 556 0x0D; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 557 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x0E; 0x0F; 558 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 559 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 560 0x10; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 561 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 562 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 563 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 564 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 565 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 566 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 567 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 568 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 569 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 570 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 571 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 572 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 573 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 574 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 575 0x00; 0x00; 0x00; 0x00; 0xFF; 0xFF; 0xFF; 0xFF; 576 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 577 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 578 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 579 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 580 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0x11; 581 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 582 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 583 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 584 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 585 0x00; 0x00; 0x00; 0x12; 0x00; 0x00; 0x00; 0x00; 586 587 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 588 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 589 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 590 0xBF; 0xFF; 0x7E; 0x3E; 0xBF; 0xFF; 0x7E; 0xBE; 591 0xFF; 0xFF; 0xFC; 0xFF; 0x3F; 0xFF; 0xF1; 0x7E; 592 0xF8; 0xF1; 0xF3; 0xFF; 0x3F; 0xFF; 0xFF; 0x7F; 593 0x00; 0x00; 0x00; 0x00; 0x03; 0x80; 0x01; 0x00; 594 0x00; 0xE0; 0xFF; 0xDF; 0xCF; 0xFF; 0x31; 0xFF; 595 0xFF; 0xFF; 0xFF; 0xCF; 0xC0; 0xFF; 0x0F; 0x00; 596 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 597 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 598 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 599 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 600 0x1B; 0x00; 0x00; 0x00; 0x00; 0x00; 0x10; 0x40; 601 0xE0; 0xD7; 0x01; 0x00; 0x00; 0xFC; 0x01; 0x00; 602 0x00; 0x7C; 0x18; 0x00; 0x00; 0x00; 0x00; 0x00; 603 0x8B; 0x70; 0x00; 0x02; 0x00; 0x00; 0x00; 0x02; 604 0x00; 0x00; 0x8B; 0x70; 0x00; 0x00; 0xC0; 0x00; 605 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 606 0x06; 0x00; 0xCF; 0xFC; 0xFC; 0xFC; 0x3F; 0x03; 607 0x00; 0x00; 0x00; 0x00; 0x7C; 0x00; 0x00; 0x00; 608 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 609 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 610 0x05; 0x00; 0x08; 0x00; 0x00; 0x00; 0x00; 0x00; 611 0x00; 0x00; 0x00; 0x00; 0x00; 0x02; 0x12; 0x00; 612 0x00; 0x00; 0x00; 0xFF; 0x00; 0x00; 0x00; 0x00; 613 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 614 0x00; 0x18; 0x00; 0xB0; 0x00; 0x00; 0x00; 0x00; 615 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x48; 0x00; 616 0x00; 0x00; 0x00; 0x4E; 0x00; 0x00; 0x00; 0x00; 617 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 618 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 619 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 620 0x00; 0x19; 0x00; 0x30; 0x00; 0x00; 0x00; 0x00; 621 0x00; 0x00; 0x10; 0x00; 0x00; 0x00; 0x00; 0x00; 622 0x00; 0x1C; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 623 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 624 0x00; 0x01; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 625 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 626 0x81; 0x0D; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 627 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 628 0x00; 0x1C; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 629 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 630 0x00; 0x00; 0x00; 0x74; 0x00; 0x00; 0x00; 0x00; 631 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 632 0x08; 0x20; 0x84; 0x10; 0x00; 0x02; 0x68; 0x01; 633 0x02; 0x00; 0x08; 0x20; 0x84; 0x10; 0x00; 0x02; 634 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 635 0x00; 0x00; 0x00; 0x00; 0x40; 0x00; 0x00; 0x00; 636 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 637 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 638 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 639 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 640 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 641 0xFF; 0xFF; 0xFF; 0x0B; 0xFF; 0xFF; 0xFF; 0xFF; 642 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0x03; 643 0xFF; 0xFF; 0x3F; 0x3F; 0xFF; 0xFF; 0xFF; 0xFF; 644 0x3F; 0x3F; 0xFF; 0xAA; 0xFF; 0xFF; 0xFF; 0x3F; 645 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xDF; 0x5F; 646 0xDE; 0xFF; 0xCF; 0xEF; 0xFF; 0xFF; 0xDC; 0x3F; 647 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 648 0x00; 0x50; 0x55; 0x55; 0xA5; 0x02; 0xDB; 0x36; 649 0x00; 0x00; 0x10; 0x40; 0x00; 0x50; 0x55; 0x55; 650 0xA5; 0x02; 0xDB; 0x36; 0x00; 0x00; 0x90; 0x47; 651 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 652 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 653 0xFF; 0xFF; 0xFF; 0xFF; 0x0F; 0x00; 0x00; 0x00; 654 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 655 0x00; 0x00; 0x00; 0xA0; 0x00; 0xFC; 0x7F; 0x5F; 656 0xDB; 0x7F; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 657 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 658 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00 659 |] 660 661 let uniCharPrecompSourceTable = [| 662 0x00000300; 0x00540000; 0x00000301; 0x00750054; 663 0x00000302; 0x002000C9; 0x00000303; 0x001C00E9; 664 0x00000304; 0x002C0105; 0x00000306; 0x00200131; 665 0x00000307; 0x002E0151; 0x00000308; 0x0036017F; 666 0x00000309; 0x001801B5; 0x0000030A; 0x000601CD; 667 0x0000030B; 0x000601D3; 0x0000030C; 0x002501D9; 668 0x0000030F; 0x000E01FE; 0x00000311; 0x000C020C; 669 0x00000313; 0x000E0218; 0x00000314; 0x00100226; 670 0x0000031B; 0x00040236; 0x00000323; 0x002A023A; 671 0x00000324; 0x00020264; 0x00000325; 0x00020266; 672 0x00000326; 0x00040268; 0x00000327; 0x0016026C; 673 0x00000328; 0x000A0282; 0x0000032D; 0x000C028C; 674 0x0000032E; 0x00020298; 0x00000330; 0x0006029A; 675 0x00000331; 0x001102A0; 0x00000338; 0x002C02B1; 676 0x00000342; 0x001D02DD; 0x00000345; 0x003F02FA; 677 0x00000653; 0x00010339; 0x00000654; 0x0006033A; 678 0x00000655; 0x00010340; 0x0000093C; 0x00030341; 679 0x000009BE; 0x00010344; 0x000009D7; 0x00010345; 680 0x00000B3E; 0x00010346; 0x00000B56; 0x00010347; 681 0x00000B57; 0x00010348; 0x00000BBE; 0x00020349; 682 0x00000BD7; 0x0002034B; 0x00000C56; 0x0001034D; 683 0x00000CC2; 0x0001034E; 0x00000CD5; 0x0003034F; 684 0x00000CD6; 0x00010352; 0x00000D3E; 0x00020353; 685 0x00000D57; 0x00010355; 0x00000DCA; 0x00020356; 686 0x00000DCF; 0x00010358; 0x00000DDF; 0x00010359; 687 0x0000102E; 0x0001035A; 0x00003099; 0x0030035B; 688 0x0000309A; 0x000A038B 689 |] 690 691 692 let uniCharBMPPrecompDestinationTable = [| 693 0x0041; 0x00C0; 0x0045; 0x00C8; 0x0049; 0x00CC; 0x004E; 0x01F8; 694 0x004F; 0x00D2; 0x0055; 0x00D9; 0x0057; 0x1E80; 0x0059; 0x1EF2; 695 0x0061; 0x00E0; 0x0065; 0x00E8; 0x0069; 0x00EC; 0x006E; 0x01F9; 696 0x006F; 0x00F2; 0x0075; 0x00F9; 0x0077; 0x1E81; 0x0079; 0x1EF3; 697 0x00A8; 0x1FED; 0x00C2; 0x1EA6; 0x00CA; 0x1EC0; 0x00D4; 0x1ED2; 698 0x00DC; 0x01DB; 0x00E2; 0x1EA7; 0x00EA; 0x1EC1; 0x00F4; 0x1ED3; 699 0x00FC; 0x01DC; 0x0102; 0x1EB0; 0x0103; 0x1EB1; 0x0112; 0x1E14; 700 0x0113; 0x1E15; 0x014C; 0x1E50; 0x014D; 0x1E51; 0x01A0; 0x1EDC; 701 0x01A1; 0x1EDD; 0x01AF; 0x1EEA; 0x01B0; 0x1EEB; 0x0391; 0x1FBA; 702 0x0395; 0x1FC8; 0x0397; 0x1FCA; 0x0399; 0x1FDA; 0x039F; 0x1FF8; 703 0x03A5; 0x1FEA; 0x03A9; 0x1FFA; 0x03B1; 0x1F70; 0x03B5; 0x1F72; 704 0x03B7; 0x1F74; 0x03B9; 0x1F76; 0x03BF; 0x1F78; 0x03C5; 0x1F7A; 705 0x03C9; 0x1F7C; 0x03CA; 0x1FD2; 0x03CB; 0x1FE2; 0x0415; 0x0400; 706 0x0418; 0x040D; 0x0435; 0x0450; 0x0438; 0x045D; 0x1F00; 0x1F02; 707 0x1F01; 0x1F03; 0x1F08; 0x1F0A; 0x1F09; 0x1F0B; 0x1F10; 0x1F12; 708 0x1F11; 0x1F13; 0x1F18; 0x1F1A; 0x1F19; 0x1F1B; 0x1F20; 0x1F22; 709 0x1F21; 0x1F23; 0x1F28; 0x1F2A; 0x1F29; 0x1F2B; 0x1F30; 0x1F32; 710 0x1F31; 0x1F33; 0x1F38; 0x1F3A; 0x1F39; 0x1F3B; 0x1F40; 0x1F42; 711 0x1F41; 0x1F43; 0x1F48; 0x1F4A; 0x1F49; 0x1F4B; 0x1F50; 0x1F52; 712 0x1F51; 0x1F53; 0x1F59; 0x1F5B; 0x1F60; 0x1F62; 0x1F61; 0x1F63; 713 0x1F68; 0x1F6A; 0x1F69; 0x1F6B; 0x1FBF; 0x1FCD; 0x1FFE; 0x1FDD; 714 0x0041; 0x00C1; 0x0043; 0x0106; 0x0045; 0x00C9; 0x0047; 0x01F4; 715 0x0049; 0x00CD; 0x004B; 0x1E30; 0x004C; 0x0139; 0x004D; 0x1E3E; 716 0x004E; 0x0143; 0x004F; 0x00D3; 0x0050; 0x1E54; 0x0052; 0x0154; 717 0x0053; 0x015A; 0x0055; 0x00DA; 0x0057; 0x1E82; 0x0059; 0x00DD; 718 0x005A; 0x0179; 0x0061; 0x00E1; 0x0063; 0x0107; 0x0065; 0x00E9; 719 0x0067; 0x01F5; 0x0069; 0x00ED; 0x006B; 0x1E31; 0x006C; 0x013A; 720 0x006D; 0x1E3F; 0x006E; 0x0144; 0x006F; 0x00F3; 0x0070; 0x1E55; 721 0x0072; 0x0155; 0x0073; 0x015B; 0x0075; 0x00FA; 0x0077; 0x1E83; 722 0x0079; 0x00FD; 0x007A; 0x017A; 0x00A8; 0x0385; 0x00C2; 0x1EA4; 723 0x00C5; 0x01FA; 0x00C6; 0x01FC; 0x00C7; 0x1E08; 0x00CA; 0x1EBE; 724 0x00CF; 0x1E2E; 0x00D4; 0x1ED0; 0x00D5; 0x1E4C; 0x00D8; 0x01FE; 725 0x00DC; 0x01D7; 0x00E2; 0x1EA5; 0x00E5; 0x01FB; 0x00E6; 0x01FD; 726 0x00E7; 0x1E09; 0x00EA; 0x1EBF; 0x00EF; 0x1E2F; 0x00F4; 0x1ED1; 727 0x00F5; 0x1E4D; 0x00F8; 0x01FF; 0x00FC; 0x01D8; 0x0102; 0x1EAE; 728 0x0103; 0x1EAF; 0x0112; 0x1E16; 0x0113; 0x1E17; 0x014C; 0x1E52; 729 0x014D; 0x1E53; 0x0168; 0x1E78; 0x0169; 0x1E79; 0x01A0; 0x1EDA; 730 0x01A1; 0x1EDB; 0x01AF; 0x1EE8; 0x01B0; 0x1EE9; 0x0391; 0x0386; 731 0x0395; 0x0388; 0x0397; 0x0389; 0x0399; 0x038A; 0x039F; 0x038C; 732 0x03A5; 0x038E; 0x03A9; 0x038F; 0x03B1; 0x03AC; 0x03B5; 0x03AD; 733 0x03B7; 0x03AE; 0x03B9; 0x03AF; 0x03BF; 0x03CC; 0x03C5; 0x03CD; 734 0x03C9; 0x03CE; 0x03CA; 0x0390; 0x03CB; 0x03B0; 0x03D2; 0x03D3; 735 0x0413; 0x0403; 0x041A; 0x040C; 0x0433; 0x0453; 0x043A; 0x045C; 736 0x1F00; 0x1F04; 0x1F01; 0x1F05; 0x1F08; 0x1F0C; 0x1F09; 0x1F0D; 737 0x1F10; 0x1F14; 0x1F11; 0x1F15; 0x1F18; 0x1F1C; 0x1F19; 0x1F1D; 738 0x1F20; 0x1F24; 0x1F21; 0x1F25; 0x1F28; 0x1F2C; 0x1F29; 0x1F2D; 739 0x1F30; 0x1F34; 0x1F31; 0x1F35; 0x1F38; 0x1F3C; 0x1F39; 0x1F3D; 740 0x1F40; 0x1F44; 0x1F41; 0x1F45; 0x1F48; 0x1F4C; 0x1F49; 0x1F4D; 741 0x1F50; 0x1F54; 0x1F51; 0x1F55; 0x1F59; 0x1F5D; 0x1F60; 0x1F64; 742 0x1F61; 0x1F65; 0x1F68; 0x1F6C; 0x1F69; 0x1F6D; 0x1FBF; 0x1FCE; 743 0x1FFE; 0x1FDE; 0x0041; 0x00C2; 0x0043; 0x0108; 0x0045; 0x00CA; 744 0x0047; 0x011C; 0x0048; 0x0124; 0x0049; 0x00CE; 0x004A; 0x0134; 745 0x004F; 0x00D4; 0x0053; 0x015C; 0x0055; 0x00DB; 0x0057; 0x0174; 746 0x0059; 0x0176; 0x005A; 0x1E90; 0x0061; 0x00E2; 0x0063; 0x0109; 747 0x0065; 0x00EA; 0x0067; 0x011D; 0x0068; 0x0125; 0x0069; 0x00EE; 748 0x006A; 0x0135; 0x006F; 0x00F4; 0x0073; 0x015D; 0x0075; 0x00FB; 749 0x0077; 0x0175; 0x0079; 0x0177; 0x007A; 0x1E91; 0x1EA0; 0x1EAC; 750 0x1EA1; 0x1EAD; 0x1EB8; 0x1EC6; 0x1EB9; 0x1EC7; 0x1ECC; 0x1ED8; 751 0x1ECD; 0x1ED9; 0x0041; 0x00C3; 0x0045; 0x1EBC; 0x0049; 0x0128; 752 0x004E; 0x00D1; 0x004F; 0x00D5; 0x0055; 0x0168; 0x0056; 0x1E7C; 753 0x0059; 0x1EF8; 0x0061; 0x00E3; 0x0065; 0x1EBD; 0x0069; 0x0129; 754 0x006E; 0x00F1; 0x006F; 0x00F5; 0x0075; 0x0169; 0x0076; 0x1E7D; 755 0x0079; 0x1EF9; 0x00C2; 0x1EAA; 0x00CA; 0x1EC4; 0x00D4; 0x1ED6; 756 0x00E2; 0x1EAB; 0x00EA; 0x1EC5; 0x00F4; 0x1ED7; 0x0102; 0x1EB4; 757 0x0103; 0x1EB5; 0x01A0; 0x1EE0; 0x01A1; 0x1EE1; 0x01AF; 0x1EEE; 758 0x01B0; 0x1EEF; 0x0041; 0x0100; 0x0045; 0x0112; 0x0047; 0x1E20; 759 0x0049; 0x012A; 0x004F; 0x014C; 0x0055; 0x016A; 0x0059; 0x0232; 760 0x0061; 0x0101; 0x0065; 0x0113; 0x0067; 0x1E21; 0x0069; 0x012B; 761 0x006F; 0x014D; 0x0075; 0x016B; 0x0079; 0x0233; 0x00C4; 0x01DE; 762 0x00C6; 0x01E2; 0x00D5; 0x022C; 0x00D6; 0x022A; 0x00DC; 0x01D5; 763 0x00E4; 0x01DF; 0x00E6; 0x01E3; 0x00F5; 0x022D; 0x00F6; 0x022B; 764 0x00FC; 0x01D6; 0x01EA; 0x01EC; 0x01EB; 0x01ED; 0x0226; 0x01E0; 765 0x0227; 0x01E1; 0x022E; 0x0230; 0x022F; 0x0231; 0x0391; 0x1FB9; 766 0x0399; 0x1FD9; 0x03A5; 0x1FE9; 0x03B1; 0x1FB1; 0x03B9; 0x1FD1; 767 0x03C5; 0x1FE1; 0x0418; 0x04E2; 0x0423; 0x04EE; 0x0438; 0x04E3; 768 0x0443; 0x04EF; 0x1E36; 0x1E38; 0x1E37; 0x1E39; 0x1E5A; 0x1E5C; 769 0x1E5B; 0x1E5D; 0x0041; 0x0102; 0x0045; 0x0114; 0x0047; 0x011E; 770 0x0049; 0x012C; 0x004F; 0x014E; 0x0055; 0x016C; 0x0061; 0x0103; 771 0x0065; 0x0115; 0x0067; 0x011F; 0x0069; 0x012D; 0x006F; 0x014F; 772 0x0075; 0x016D; 0x0228; 0x1E1C; 0x0229; 0x1E1D; 0x0391; 0x1FB8; 773 0x0399; 0x1FD8; 0x03A5; 0x1FE8; 0x03B1; 0x1FB0; 0x03B9; 0x1FD0; 774 0x03C5; 0x1FE0; 0x0410; 0x04D0; 0x0415; 0x04D6; 0x0416; 0x04C1; 775 0x0418; 0x0419; 0x0423; 0x040E; 0x0430; 0x04D1; 0x0435; 0x04D7; 776 0x0436; 0x04C2; 0x0438; 0x0439; 0x0443; 0x045E; 0x1EA0; 0x1EB6; 777 0x1EA1; 0x1EB7; 0x0041; 0x0226; 0x0042; 0x1E02; 0x0043; 0x010A; 778 0x0044; 0x1E0A; 0x0045; 0x0116; 0x0046; 0x1E1E; 0x0047; 0x0120; 779 0x0048; 0x1E22; 0x0049; 0x0130; 0x004D; 0x1E40; 0x004E; 0x1E44; 780 0x004F; 0x022E; 0x0050; 0x1E56; 0x0052; 0x1E58; 0x0053; 0x1E60; 781 0x0054; 0x1E6A; 0x0057; 0x1E86; 0x0058; 0x1E8A; 0x0059; 0x1E8E; 782 0x005A; 0x017B; 0x0061; 0x0227; 0x0062; 0x1E03; 0x0063; 0x010B; 783 0x0064; 0x1E0B; 0x0065; 0x0117; 0x0066; 0x1E1F; 0x0067; 0x0121; 784 0x0068; 0x1E23; 0x006D; 0x1E41; 0x006E; 0x1E45; 0x006F; 0x022F; 785 0x0070; 0x1E57; 0x0072; 0x1E59; 0x0073; 0x1E61; 0x0074; 0x1E6B; 786 0x0077; 0x1E87; 0x0078; 0x1E8B; 0x0079; 0x1E8F; 0x007A; 0x017C; 787 0x015A; 0x1E64; 0x015B; 0x1E65; 0x0160; 0x1E66; 0x0161; 0x1E67; 788 0x017F; 0x1E9B; 0x1E62; 0x1E68; 0x1E63; 0x1E69; 0x0041; 0x00C4; 789 0x0045; 0x00CB; 0x0048; 0x1E26; 0x0049; 0x00CF; 0x004F; 0x00D6; 790 0x0055; 0x00DC; 0x0057; 0x1E84; 0x0058; 0x1E8C; 0x0059; 0x0178; 791 0x0061; 0x00E4; 0x0065; 0x00EB; 0x0068; 0x1E27; 0x0069; 0x00EF; 792 0x006F; 0x00F6; 0x0074; 0x1E97; 0x0075; 0x00FC; 0x0077; 0x1E85; 793 0x0078; 0x1E8D; 0x0079; 0x00FF; 0x00D5; 0x1E4E; 0x00F5; 0x1E4F; 794 0x016A; 0x1E7A; 0x016B; 0x1E7B; 0x0399; 0x03AA; 0x03A5; 0x03AB; 795 0x03B9; 0x03CA; 0x03C5; 0x03CB; 0x03D2; 0x03D4; 0x0406; 0x0407; 796 0x0410; 0x04D2; 0x0415; 0x0401; 0x0416; 0x04DC; 0x0417; 0x04DE; 797 0x0418; 0x04E4; 0x041E; 0x04E6; 0x0423; 0x04F0; 0x0427; 0x04F4; 798 0x042B; 0x04F8; 0x042D; 0x04EC; 0x0430; 0x04D3; 0x0435; 0x0451; 799 0x0436; 0x04DD; 0x0437; 0x04DF; 0x0438; 0x04E5; 0x043E; 0x04E7; 800 0x0443; 0x04F1; 0x0447; 0x04F5; 0x044B; 0x04F9; 0x044D; 0x04ED; 801 0x0456; 0x0457; 0x04D8; 0x04DA; 0x04D9; 0x04DB; 0x04E8; 0x04EA; 802 0x04E9; 0x04EB; 0x0041; 0x1EA2; 0x0045; 0x1EBA; 0x0049; 0x1EC8; 803 0x004F; 0x1ECE; 0x0055; 0x1EE6; 0x0059; 0x1EF6; 0x0061; 0x1EA3; 804 0x0065; 0x1EBB; 0x0069; 0x1EC9; 0x006F; 0x1ECF; 0x0075; 0x1EE7; 805 0x0079; 0x1EF7; 0x00C2; 0x1EA8; 0x00CA; 0x1EC2; 0x00D4; 0x1ED4; 806 0x00E2; 0x1EA9; 0x00EA; 0x1EC3; 0x00F4; 0x1ED5; 0x0102; 0x1EB2; 807 0x0103; 0x1EB3; 0x01A0; 0x1EDE; 0x01A1; 0x1EDF; 0x01AF; 0x1EEC; 808 0x01B0; 0x1EED; 0x0041; 0x00C5; 0x0055; 0x016E; 0x0061; 0x00E5; 809 0x0075; 0x016F; 0x0077; 0x1E98; 0x0079; 0x1E99; 0x004F; 0x0150; 810 0x0055; 0x0170; 0x006F; 0x0151; 0x0075; 0x0171; 0x0423; 0x04F2; 811 0x0443; 0x04F3; 0x0041; 0x01CD; 0x0043; 0x010C; 0x0044; 0x010E; 812 0x0045; 0x011A; 0x0047; 0x01E6; 0x0048; 0x021E; 0x0049; 0x01CF; 813 0x004B; 0x01E8; 0x004C; 0x013D; 0x004E; 0x0147; 0x004F; 0x01D1; 814 0x0052; 0x0158; 0x0053; 0x0160; 0x0054; 0x0164; 0x0055; 0x01D3; 815 0x005A; 0x017D; 0x0061; 0x01CE; 0x0063; 0x010D; 0x0064; 0x010F; 816 0x0065; 0x011B; 0x0067; 0x01E7; 0x0068; 0x021F; 0x0069; 0x01D0; 817 0x006A; 0x01F0; 0x006B; 0x01E9; 0x006C; 0x013E; 0x006E; 0x0148; 818 0x006F; 0x01D2; 0x0072; 0x0159; 0x0073; 0x0161; 0x0074; 0x0165; 819 0x0075; 0x01D4; 0x007A; 0x017E; 0x00DC; 0x01D9; 0x00FC; 0x01DA; 820 0x01B7; 0x01EE; 0x0292; 0x01EF; 0x0041; 0x0200; 0x0045; 0x0204; 821 0x0049; 0x0208; 0x004F; 0x020C; 0x0052; 0x0210; 0x0055; 0x0214; 822 0x0061; 0x0201; 0x0065; 0x0205; 0x0069; 0x0209; 0x006F; 0x020D; 823 0x0072; 0x0211; 0x0075; 0x0215; 0x0474; 0x0476; 0x0475; 0x0477; 824 0x0041; 0x0202; 0x0045; 0x0206; 0x0049; 0x020A; 0x004F; 0x020E; 825 0x0052; 0x0212; 0x0055; 0x0216; 0x0061; 0x0203; 0x0065; 0x0207; 826 0x0069; 0x020B; 0x006F; 0x020F; 0x0072; 0x0213; 0x0075; 0x0217; 827 0x0391; 0x1F08; 0x0395; 0x1F18; 0x0397; 0x1F28; 0x0399; 0x1F38; 828 0x039F; 0x1F48; 0x03A9; 0x1F68; 0x03B1; 0x1F00; 0x03B5; 0x1F10; 829 0x03B7; 0x1F20; 0x03B9; 0x1F30; 0x03BF; 0x1F40; 0x03C1; 0x1FE4; 830 0x03C5; 0x1F50; 0x03C9; 0x1F60; 0x0391; 0x1F09; 0x0395; 0x1F19; 831 0x0397; 0x1F29; 0x0399; 0x1F39; 0x039F; 0x1F49; 0x03A1; 0x1FEC; 832 0x03A5; 0x1F59; 0x03A9; 0x1F69; 0x03B1; 0x1F01; 0x03B5; 0x1F11; 833 0x03B7; 0x1F21; 0x03B9; 0x1F31; 0x03BF; 0x1F41; 0x03C1; 0x1FE5; 834 0x03C5; 0x1F51; 0x03C9; 0x1F61; 0x004F; 0x01A0; 0x0055; 0x01AF; 835 0x006F; 0x01A1; 0x0075; 0x01B0; 0x0041; 0x1EA0; 0x0042; 0x1E04; 836 0x0044; 0x1E0C; 0x0045; 0x1EB8; 0x0048; 0x1E24; 0x0049; 0x1ECA; 837 0x004B; 0x1E32; 0x004C; 0x1E36; 0x004D; 0x1E42; 0x004E; 0x1E46; 838 0x004F; 0x1ECC; 0x0052; 0x1E5A; 0x0053; 0x1E62; 0x0054; 0x1E6C; 839 0x0055; 0x1EE4; 0x0056; 0x1E7E; 0x0057; 0x1E88; 0x0059; 0x1EF4; 840 0x005A; 0x1E92; 0x0061; 0x1EA1; 0x0062; 0x1E05; 0x0064; 0x1E0D; 841 0x0065; 0x1EB9; 0x0068; 0x1E25; 0x0069; 0x1ECB; 0x006B; 0x1E33; 842 0x006C; 0x1E37; 0x006D; 0x1E43; 0x006E; 0x1E47; 0x006F; 0x1ECD; 843 0x0072; 0x1E5B; 0x0073; 0x1E63; 0x0074; 0x1E6D; 0x0075; 0x1EE5; 844 0x0076; 0x1E7F; 0x0077; 0x1E89; 0x0079; 0x1EF5; 0x007A; 0x1E93; 845 0x01A0; 0x1EE2; 0x01A1; 0x1EE3; 0x01AF; 0x1EF0; 0x01B0; 0x1EF1; 846 0x0055; 0x1E72; 0x0075; 0x1E73; 0x0041; 0x1E00; 0x0061; 0x1E01; 847 0x0053; 0x0218; 0x0054; 0x021A; 0x0073; 0x0219; 0x0074; 0x021B; 848 0x0043; 0x00C7; 0x0044; 0x1E10; 0x0045; 0x0228; 0x0047; 0x0122; 849 0x0048; 0x1E28; 0x004B; 0x0136; 0x004C; 0x013B; 0x004E; 0x0145; 850 0x0052; 0x0156; 0x0053; 0x015E; 0x0054; 0x0162; 0x0063; 0x00E7; 851 0x0064; 0x1E11; 0x0065; 0x0229; 0x0067; 0x0123; 0x0068; 0x1E29; 852 0x006B; 0x0137; 0x006C; 0x013C; 0x006E; 0x0146; 0x0072; 0x0157; 853 0x0073; 0x015F; 0x0074; 0x0163; 0x0041; 0x0104; 0x0045; 0x0118; 854 0x0049; 0x012E; 0x004F; 0x01EA; 0x0055; 0x0172; 0x0061; 0x0105; 855 0x0065; 0x0119; 0x0069; 0x012F; 0x006F; 0x01EB; 0x0075; 0x0173; 856 0x0044; 0x1E12; 0x0045; 0x1E18; 0x004C; 0x1E3C; 0x004E; 0x1E4A; 857 0x0054; 0x1E70; 0x0055; 0x1E76; 0x0064; 0x1E13; 0x0065; 0x1E19; 858 0x006C; 0x1E3D; 0x006E; 0x1E4B; 0x0074; 0x1E71; 0x0075; 0x1E77; 859 0x0048; 0x1E2A; 0x0068; 0x1E2B; 0x0045; 0x1E1A; 0x0049; 0x1E2C; 860 0x0055; 0x1E74; 0x0065; 0x1E1B; 0x0069; 0x1E2D; 0x0075; 0x1E75; 861 0x0042; 0x1E06; 0x0044; 0x1E0E; 0x004B; 0x1E34; 0x004C; 0x1E3A; 862 0x004E; 0x1E48; 0x0052; 0x1E5E; 0x0054; 0x1E6E; 0x005A; 0x1E94; 863 0x0062; 0x1E07; 0x0064; 0x1E0F; 0x0068; 0x1E96; 0x006B; 0x1E35; 864 0x006C; 0x1E3B; 0x006E; 0x1E49; 0x0072; 0x1E5F; 0x0074; 0x1E6F; 865 0x007A; 0x1E95; 0x003C; 0x226E; 0x003D; 0x2260; 0x003E; 0x226F; 866 0x2190; 0x219A; 0x2192; 0x219B; 0x2194; 0x21AE; 0x21D0; 0x21CD; 867 0x21D2; 0x21CF; 0x21D4; 0x21CE; 0x2203; 0x2204; 0x2208; 0x2209; 868 0x220B; 0x220C; 0x2223; 0x2224; 0x2225; 0x2226; 0x223C; 0x2241; 869 0x2243; 0x2244; 0x2245; 0x2247; 0x2248; 0x2249; 0x224D; 0x226D; 870 0x2261; 0x2262; 0x2264; 0x2270; 0x2265; 0x2271; 0x2272; 0x2274; 871 0x2273; 0x2275; 0x2276; 0x2278; 0x2277; 0x2279; 0x227A; 0x2280; 872 0x227B; 0x2281; 0x227C; 0x22E0; 0x227D; 0x22E1; 0x2282; 0x2284; 873 0x2283; 0x2285; 0x2286; 0x2288; 0x2287; 0x2289; 0x2291; 0x22E2; 874 0x2292; 0x22E3; 0x22A2; 0x22AC; 0x22A8; 0x22AD; 0x22A9; 0x22AE; 875 0x22AB; 0x22AF; 0x22B2; 0x22EA; 0x22B3; 0x22EB; 0x22B4; 0x22EC; 876 0x22B5; 0x22ED; 0x00A8; 0x1FC1; 0x03B1; 0x1FB6; 0x03B7; 0x1FC6; 877 0x03B9; 0x1FD6; 0x03C5; 0x1FE6; 0x03C9; 0x1FF6; 0x03CA; 0x1FD7; 878 0x03CB; 0x1FE7; 0x1F00; 0x1F06; 0x1F01; 0x1F07; 0x1F08; 0x1F0E; 879 0x1F09; 0x1F0F; 0x1F20; 0x1F26; 0x1F21; 0x1F27; 0x1F28; 0x1F2E; 880 0x1F29; 0x1F2F; 0x1F30; 0x1F36; 0x1F31; 0x1F37; 0x1F38; 0x1F3E; 881 0x1F39; 0x1F3F; 0x1F50; 0x1F56; 0x1F51; 0x1F57; 0x1F59; 0x1F5F; 882 0x1F60; 0x1F66; 0x1F61; 0x1F67; 0x1F68; 0x1F6E; 0x1F69; 0x1F6F; 883 0x1FBF; 0x1FCF; 0x1FFE; 0x1FDF; 0x0391; 0x1FBC; 0x0397; 0x1FCC; 884 0x03A9; 0x1FFC; 0x03AC; 0x1FB4; 0x03AE; 0x1FC4; 0x03B1; 0x1FB3; 885 0x03B7; 0x1FC3; 0x03C9; 0x1FF3; 0x03CE; 0x1FF4; 0x1F00; 0x1F80; 886 0x1F01; 0x1F81; 0x1F02; 0x1F82; 0x1F03; 0x1F83; 0x1F04; 0x1F84; 887 0x1F05; 0x1F85; 0x1F06; 0x1F86; 0x1F07; 0x1F87; 0x1F08; 0x1F88; 888 0x1F09; 0x1F89; 0x1F0A; 0x1F8A; 0x1F0B; 0x1F8B; 0x1F0C; 0x1F8C; 889 0x1F0D; 0x1F8D; 0x1F0E; 0x1F8E; 0x1F0F; 0x1F8F; 0x1F20; 0x1F90; 890 0x1F21; 0x1F91; 0x1F22; 0x1F92; 0x1F23; 0x1F93; 0x1F24; 0x1F94; 891 0x1F25; 0x1F95; 0x1F26; 0x1F96; 0x1F27; 0x1F97; 0x1F28; 0x1F98; 892 0x1F29; 0x1F99; 0x1F2A; 0x1F9A; 0x1F2B; 0x1F9B; 0x1F2C; 0x1F9C; 893 0x1F2D; 0x1F9D; 0x1F2E; 0x1F9E; 0x1F2F; 0x1F9F; 0x1F60; 0x1FA0; 894 0x1F61; 0x1FA1; 0x1F62; 0x1FA2; 0x1F63; 0x1FA3; 0x1F64; 0x1FA4; 895 0x1F65; 0x1FA5; 0x1F66; 0x1FA6; 0x1F67; 0x1FA7; 0x1F68; 0x1FA8; 896 0x1F69; 0x1FA9; 0x1F6A; 0x1FAA; 0x1F6B; 0x1FAB; 0x1F6C; 0x1FAC; 897 0x1F6D; 0x1FAD; 0x1F6E; 0x1FAE; 0x1F6F; 0x1FAF; 0x1F70; 0x1FB2; 898 0x1F74; 0x1FC2; 0x1F7C; 0x1FF2; 0x1FB6; 0x1FB7; 0x1FC6; 0x1FC7; 899 0x1FF6; 0x1FF7; 0x0627; 0x0622; 0x0627; 0x0623; 0x0648; 0x0624; 900 0x064A; 0x0626; 0x06C1; 0x06C2; 0x06D2; 0x06D3; 0x06D5; 0x06C0; 901 0x0627; 0x0625; 0x0928; 0x0929; 0x0930; 0x0931; 0x0933; 0x0934; 902 0x09C7; 0x09CB; 0x09C7; 0x09CC; 0x0B47; 0x0B4B; 0x0B47; 0x0B48; 903 0x0B47; 0x0B4C; 0x0BC6; 0x0BCA; 0x0BC7; 0x0BCB; 0x0B92; 0x0B94; 904 0x0BC6; 0x0BCC; 0x0C46; 0x0C48; 0x0CC6; 0x0CCA; 0x0CBF; 0x0CC0; 905 0x0CC6; 0x0CC7; 0x0CCA; 0x0CCB; 0x0CC6; 0x0CC8; 0x0D46; 0x0D4A; 906 0x0D47; 0x0D4B; 0x0D46; 0x0D4C; 0x0DD9; 0x0DDA; 0x0DDC; 0x0DDD; 907 0x0DD9; 0x0DDC; 0x0DD9; 0x0DDE; 0x1025; 0x1026; 0x3046; 0x3094; 908 0x304B; 0x304C; 0x304D; 0x304E; 0x304F; 0x3050; 0x3051; 0x3052; 909 0x3053; 0x3054; 0x3055; 0x3056; 0x3057; 0x3058; 0x3059; 0x305A; 910 0x305B; 0x305C; 0x305D; 0x305E; 0x305F; 0x3060; 0x3061; 0x3062; 911 0x3064; 0x3065; 0x3066; 0x3067; 0x3068; 0x3069; 0x306F; 0x3070; 912 0x3072; 0x3073; 0x3075; 0x3076; 0x3078; 0x3079; 0x307B; 0x307C; 913 0x309D; 0x309E; 0x30A6; 0x30F4; 0x30AB; 0x30AC; 0x30AD; 0x30AE; 914 0x30AF; 0x30B0; 0x30B1; 0x30B2; 0x30B3; 0x30B4; 0x30B5; 0x30B6; 915 0x30B7; 0x30B8; 0x30B9; 0x30BA; 0x30BB; 0x30BC; 0x30BD; 0x30BE; 916 0x30BF; 0x30C0; 0x30C1; 0x30C2; 0x30C4; 0x30C5; 0x30C6; 0x30C7; 917 0x30C8; 0x30C9; 0x30CF; 0x30D0; 0x30D2; 0x30D3; 0x30D5; 0x30D6; 918 0x30D8; 0x30D9; 0x30DB; 0x30DC; 0x30EF; 0x30F7; 0x30F0; 0x30F8; 919 0x30F1; 0x30F9; 0x30F2; 0x30FA; 0x30FD; 0x30FE; 0x306F; 0x3071; 920 0x3072; 0x3074; 0x3075; 0x3077; 0x3078; 0x307A; 0x307B; 0x307D; 921 0x30CF; 0x30D1; 0x30D2; 0x30D4; 0x30D5; 0x30D7; 0x30D8; 0x30DA; 922 0x30DB; 0x30DD 923 |] 924 925 let uniCharCombiningBitmap = [| 926 0x00; 0x00; 0x00; 0x01; 0x02; 0x03; 0x04; 0x05; 927 0x00; 0x06; 0x07; 0x08; 0x09; 0x0A; 0x0B; 0x0C; 928 0x0D; 0x14; 0x00; 0x00; 0x00; 0x00; 0x00; 0x0E; 929 0x0F; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 930 0x10; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 931 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 932 0x11; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 933 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 934 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 935 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 936 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 937 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 938 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 939 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 940 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 941 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 942 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 943 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 944 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 945 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 946 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 947 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 948 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 949 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 950 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 951 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 952 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 953 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 954 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 955 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 956 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 957 0x00; 0x00; 0x00; 0x12; 0x00; 0x00; 0x13; 0x00; 958 959 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 0xFF; 960 0xFF; 0xFF; 0x00; 0x00; 0xFF; 0xFF; 0x00; 0x00; 961 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 962 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 963 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 964 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 965 0x78; 0x03; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 966 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 967 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 968 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 969 0x00; 0x00; 0xFE; 0xFF; 0xFB; 0xFF; 0xFF; 0xBB; 970 0x16; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 971 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 972 0x00; 0xF8; 0x3F; 0x00; 0x00; 0x00; 0x01; 0x00; 973 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 974 0x00; 0x00; 0xC0; 0xFF; 0x9F; 0x3D; 0x00; 0x00; 975 0x00; 0x00; 0x02; 0x00; 0x00; 0x00; 0xFF; 0xFF; 976 0xFF; 0x07; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 977 0x00; 0x00; 0x00; 0x00; 0xC0; 0xFF; 0x01; 0x00; 978 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 979 0x0E; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xD0; 980 0xFF; 0x3F; 0x1E; 0x00; 0x0C; 0x00; 0x00; 0x00; 981 0x0E; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xD0; 982 0x9F; 0x39; 0x80; 0x00; 0x0C; 0x00; 0x00; 0x00; 983 0x04; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xD0; 984 0x87; 0x39; 0x00; 0x00; 0x00; 0x00; 0x03; 0x00; 985 0x0E; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xD0; 986 0xBF; 0x3B; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 987 0x0E; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xD0; 988 0x8F; 0x39; 0xC0; 0x00; 0x00; 0x00; 0x00; 0x00; 989 0x04; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xC0; 990 0xC7; 0x3D; 0x80; 0x00; 0x00; 0x00; 0x00; 0x00; 991 0x0E; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xC0; 992 0xDF; 0x3D; 0x60; 0x00; 0x00; 0x00; 0x00; 0x00; 993 0x0C; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xC0; 994 0xDF; 0x3D; 0x60; 0x00; 0x00; 0x00; 0x00; 0x00; 995 0x0C; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xC0; 996 0xCF; 0x3D; 0x80; 0x00; 0x00; 0x00; 0x00; 0x00; 997 0x0C; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 998 0x00; 0x84; 0x5F; 0xFF; 0x00; 0x00; 0x0C; 0x00; 999 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xF2; 0x07; 1000 0x80; 0x7F; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1001 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xF2; 0x1B; 1002 0x00; 0x3F; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1003 0x00; 0x00; 0x00; 0x03; 0x00; 0x00; 0xA0; 0xC2; 1004 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xFE; 0xFF; 1005 0xDF; 0x00; 0xFF; 0xFE; 0xFF; 0xFF; 0xFF; 0x1F; 1006 0x40; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1007 0x00; 0x00; 0x00; 0x00; 0x00; 0xF0; 0xC7; 0x03; 1008 0x00; 0x00; 0xC0; 0x03; 0x00; 0x00; 0x00; 0x00; 1009 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1010 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1011 0x00; 0x00; 0x1C; 0x00; 0x00; 0x00; 0x1C; 0x00; 1012 0x00; 0x00; 0x0C; 0x00; 0x00; 0x00; 0x0C; 0x00; 1013 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xF0; 0xFF; 1014 0xFF; 0xFF; 0x0F; 0x00; 0x00; 0x00; 0x00; 0x00; 1015 0x00; 0x38; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1016 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1017 0x00; 0x00; 0x00; 0x00; 0x00; 0x02; 0x00; 0x00; 1018 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1019 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1020 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1021 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1022 0x00; 0x00; 0xFF; 0xFF; 0xFF; 0x07; 0x00; 0x00; 1023 0x00; 0x00; 0x00; 0x00; 0x00; 0xFC; 0x00; 0x00; 1024 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1025 0x00; 0x00; 0x00; 0x06; 0x00; 0x00; 0x00; 0x00; 1026 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1027 0x00; 0x00; 0x00; 0x40; 0x00; 0x00; 0x00; 0x00; 1028 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1029 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1030 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1031 0xFF; 0xFF; 0x00; 0x00; 0x0F; 0x00; 0x00; 0x00; 1032 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1033 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1034 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1035 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 1036 0x00; 0x00; 0x00; 0x00; 0xFE; 0xFF; 0x3F; 0x00; 1037 0x00; 0x00; 0x00; 0x00; 0x00; 0xFF; 0xFF; 0xFF; 1038 0x07; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00 1039 |] 1040 1041 (**** From FastUnicodeCompare.c; 1042 I checked they are equivalent to the tables in UCStringCompareData.h *) 1043 1044 let lowerCaseTable = [| 1045 1046 (* High-byte indices ( == 0 iff no case mapping and no ignorables ) *) 1047 1048 1049 (* 0 *) 0x0100; 0x0200; 0x0000; 0x0300; 0x0400; 0x0500; 0x0000; 0x0000; 1050 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1051 (* 1 *) 0x0600; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1052 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1053 (* 2 *) 0x0700; 0x0800; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1054 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1055 (* 3 *) 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1056 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1057 (* 4 *) 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1058 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1059 (* 5 *) 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1060 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1061 (* 6 *) 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1062 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1063 (* 7 *) 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1064 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1065 (* 8 *) 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1066 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1067 (* 9 *) 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1068 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1069 (* A *) 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1070 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1071 (* B *) 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1072 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1073 (* C *) 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1074 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1075 (* D *) 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1076 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1077 (* E *) 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1078 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1079 (* F *) 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1080 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0900; 0x0A00; 1081 1082 (* Table 1 (for high byte 0x00) *) 1083 1084 (* 0 *) 0xFFFF; 0x0001; 0x0002; 0x0003; 0x0004; 0x0005; 0x0006; 0x0007; 1085 0x0008; 0x0009; 0x000A; 0x000B; 0x000C; 0x000D; 0x000E; 0x000F; 1086 (* 1 *) 0x0010; 0x0011; 0x0012; 0x0013; 0x0014; 0x0015; 0x0016; 0x0017; 1087 0x0018; 0x0019; 0x001A; 0x001B; 0x001C; 0x001D; 0x001E; 0x001F; 1088 (* 2 *) 0x0020; 0x0021; 0x0022; 0x0023; 0x0024; 0x0025; 0x0026; 0x0027; 1089 0x0028; 0x0029; 0x002A; 0x002B; 0x002C; 0x002D; 0x002E; 0x002F; 1090 (* 3 *) 0x0030; 0x0031; 0x0032; 0x0033; 0x0034; 0x0035; 0x0036; 0x0037; 1091 0x0038; 0x0039; 0x003A; 0x003B; 0x003C; 0x003D; 0x003E; 0x003F; 1092 (* 4 *) 0x0040; 0x0061; 0x0062; 0x0063; 0x0064; 0x0065; 0x0066; 0x0067; 1093 0x0068; 0x0069; 0x006A; 0x006B; 0x006C; 0x006D; 0x006E; 0x006F; 1094 (* 5 *) 0x0070; 0x0071; 0x0072; 0x0073; 0x0074; 0x0075; 0x0076; 0x0077; 1095 0x0078; 0x0079; 0x007A; 0x005B; 0x005C; 0x005D; 0x005E; 0x005F; 1096 (* 6 *) 0x0060; 0x0061; 0x0062; 0x0063; 0x0064; 0x0065; 0x0066; 0x0067; 1097 0x0068; 0x0069; 0x006A; 0x006B; 0x006C; 0x006D; 0x006E; 0x006F; 1098 (* 7 *) 0x0070; 0x0071; 0x0072; 0x0073; 0x0074; 0x0075; 0x0076; 0x0077; 1099 0x0078; 0x0079; 0x007A; 0x007B; 0x007C; 0x007D; 0x007E; 0x007F; 1100 (* 8 *) 0x0080; 0x0081; 0x0082; 0x0083; 0x0084; 0x0085; 0x0086; 0x0087; 1101 0x0088; 0x0089; 0x008A; 0x008B; 0x008C; 0x008D; 0x008E; 0x008F; 1102 (* 9 *) 0x0090; 0x0091; 0x0092; 0x0093; 0x0094; 0x0095; 0x0096; 0x0097; 1103 0x0098; 0x0099; 0x009A; 0x009B; 0x009C; 0x009D; 0x009E; 0x009F; 1104 (* A *) 0x00A0; 0x00A1; 0x00A2; 0x00A3; 0x00A4; 0x00A5; 0x00A6; 0x00A7; 1105 0x00A8; 0x00A9; 0x00AA; 0x00AB; 0x00AC; 0x00AD; 0x00AE; 0x00AF; 1106 (* B *) 0x00B0; 0x00B1; 0x00B2; 0x00B3; 0x00B4; 0x00B5; 0x00B6; 0x00B7; 1107 0x00B8; 0x00B9; 0x00BA; 0x00BB; 0x00BC; 0x00BD; 0x00BE; 0x00BF; 1108 (* C *) 0x00C0; 0x00C1; 0x00C2; 0x00C3; 0x00C4; 0x00C5; 0x00E6; 0x00C7; 1109 0x00C8; 0x00C9; 0x00CA; 0x00CB; 0x00CC; 0x00CD; 0x00CE; 0x00CF; 1110 (* D *) 0x00F0; 0x00D1; 0x00D2; 0x00D3; 0x00D4; 0x00D5; 0x00D6; 0x00D7; 1111 0x00F8; 0x00D9; 0x00DA; 0x00DB; 0x00DC; 0x00DD; 0x00FE; 0x00DF; 1112 (* E *) 0x00E0; 0x00E1; 0x00E2; 0x00E3; 0x00E4; 0x00E5; 0x00E6; 0x00E7; 1113 0x00E8; 0x00E9; 0x00EA; 0x00EB; 0x00EC; 0x00ED; 0x00EE; 0x00EF; 1114 (* F *) 0x00F0; 0x00F1; 0x00F2; 0x00F3; 0x00F4; 0x00F5; 0x00F6; 0x00F7; 1115 0x00F8; 0x00F9; 0x00FA; 0x00FB; 0x00FC; 0x00FD; 0x00FE; 0x00FF; 1116 1117 (* Table 2 (for high byte 0x01) *) 1118 1119 (* 0 *) 0x0100; 0x0101; 0x0102; 0x0103; 0x0104; 0x0105; 0x0106; 0x0107; 1120 0x0108; 0x0109; 0x010A; 0x010B; 0x010C; 0x010D; 0x010E; 0x010F; 1121 (* 1 *) 0x0111; 0x0111; 0x0112; 0x0113; 0x0114; 0x0115; 0x0116; 0x0117; 1122 0x0118; 0x0119; 0x011A; 0x011B; 0x011C; 0x011D; 0x011E; 0x011F; 1123 (* 2 *) 0x0120; 0x0121; 0x0122; 0x0123; 0x0124; 0x0125; 0x0127; 0x0127; 1124 0x0128; 0x0129; 0x012A; 0x012B; 0x012C; 0x012D; 0x012E; 0x012F; 1125 (* 3 *) 0x0130; 0x0131; 0x0133; 0x0133; 0x0134; 0x0135; 0x0136; 0x0137; 1126 0x0138; 0x0139; 0x013A; 0x013B; 0x013C; 0x013D; 0x013E; 0x0140; 1127 (* 4 *) 0x0140; 0x0142; 0x0142; 0x0143; 0x0144; 0x0145; 0x0146; 0x0147; 1128 0x0148; 0x0149; 0x014B; 0x014B; 0x014C; 0x014D; 0x014E; 0x014F; 1129 (* 5 *) 0x0150; 0x0151; 0x0153; 0x0153; 0x0154; 0x0155; 0x0156; 0x0157; 1130 0x0158; 0x0159; 0x015A; 0x015B; 0x015C; 0x015D; 0x015E; 0x015F; 1131 (* 6 *) 0x0160; 0x0161; 0x0162; 0x0163; 0x0164; 0x0165; 0x0167; 0x0167; 1132 0x0168; 0x0169; 0x016A; 0x016B; 0x016C; 0x016D; 0x016E; 0x016F; 1133 (* 7 *) 0x0170; 0x0171; 0x0172; 0x0173; 0x0174; 0x0175; 0x0176; 0x0177; 1134 0x0178; 0x0179; 0x017A; 0x017B; 0x017C; 0x017D; 0x017E; 0x017F; 1135 (* 8 *) 0x0180; 0x0253; 0x0183; 0x0183; 0x0185; 0x0185; 0x0254; 0x0188; 1136 0x0188; 0x0256; 0x0257; 0x018C; 0x018C; 0x018D; 0x01DD; 0x0259; 1137 (* 9 *) 0x025B; 0x0192; 0x0192; 0x0260; 0x0263; 0x0195; 0x0269; 0x0268; 1138 0x0199; 0x0199; 0x019A; 0x019B; 0x026F; 0x0272; 0x019E; 0x0275; 1139 (* A *) 0x01A0; 0x01A1; 0x01A3; 0x01A3; 0x01A5; 0x01A5; 0x01A6; 0x01A8; 1140 0x01A8; 0x0283; 0x01AA; 0x01AB; 0x01AD; 0x01AD; 0x0288; 0x01AF; 1141 (* B *) 0x01B0; 0x028A; 0x028B; 0x01B4; 0x01B4; 0x01B6; 0x01B6; 0x0292; 1142 0x01B9; 0x01B9; 0x01BA; 0x01BB; 0x01BD; 0x01BD; 0x01BE; 0x01BF; 1143 (* C *) 0x01C0; 0x01C1; 0x01C2; 0x01C3; 0x01C6; 0x01C6; 0x01C6; 0x01C9; 1144 0x01C9; 0x01C9; 0x01CC; 0x01CC; 0x01CC; 0x01CD; 0x01CE; 0x01CF; 1145 (* D *) 0x01D0; 0x01D1; 0x01D2; 0x01D3; 0x01D4; 0x01D5; 0x01D6; 0x01D7; 1146 0x01D8; 0x01D9; 0x01DA; 0x01DB; 0x01DC; 0x01DD; 0x01DE; 0x01DF; 1147 (* E *) 0x01E0; 0x01E1; 0x01E2; 0x01E3; 0x01E5; 0x01E5; 0x01E6; 0x01E7; 1148 0x01E8; 0x01E9; 0x01EA; 0x01EB; 0x01EC; 0x01ED; 0x01EE; 0x01EF; 1149 (* F *) 0x01F0; 0x01F3; 0x01F3; 0x01F3; 0x01F4; 0x01F5; 0x01F6; 0x01F7; 1150 0x01F8; 0x01F9; 0x01FA; 0x01FB; 0x01FC; 0x01FD; 0x01FE; 0x01FF; 1151 1152 (* Table 3 (for high byte 0x03) *) 1153 1154 (* 0 *) 0x0300; 0x0301; 0x0302; 0x0303; 0x0304; 0x0305; 0x0306; 0x0307; 1155 0x0308; 0x0309; 0x030A; 0x030B; 0x030C; 0x030D; 0x030E; 0x030F; 1156 (* 1 *) 0x0310; 0x0311; 0x0312; 0x0313; 0x0314; 0x0315; 0x0316; 0x0317; 1157 0x0318; 0x0319; 0x031A; 0x031B; 0x031C; 0x031D; 0x031E; 0x031F; 1158 (* 2 *) 0x0320; 0x0321; 0x0322; 0x0323; 0x0324; 0x0325; 0x0326; 0x0327; 1159 0x0328; 0x0329; 0x032A; 0x032B; 0x032C; 0x032D; 0x032E; 0x032F; 1160 (* 3 *) 0x0330; 0x0331; 0x0332; 0x0333; 0x0334; 0x0335; 0x0336; 0x0337; 1161 0x0338; 0x0339; 0x033A; 0x033B; 0x033C; 0x033D; 0x033E; 0x033F; 1162 (* 4 *) 0x0340; 0x0341; 0x0342; 0x0343; 0x0344; 0x0345; 0x0346; 0x0347; 1163 0x0348; 0x0349; 0x034A; 0x034B; 0x034C; 0x034D; 0x034E; 0x034F; 1164 (* 5 *) 0x0350; 0x0351; 0x0352; 0x0353; 0x0354; 0x0355; 0x0356; 0x0357; 1165 0x0358; 0x0359; 0x035A; 0x035B; 0x035C; 0x035D; 0x035E; 0x035F; 1166 (* 6 *) 0x0360; 0x0361; 0x0362; 0x0363; 0x0364; 0x0365; 0x0366; 0x0367; 1167 0x0368; 0x0369; 0x036A; 0x036B; 0x036C; 0x036D; 0x036E; 0x036F; 1168 (* 7 *) 0x0370; 0x0371; 0x0372; 0x0373; 0x0374; 0x0375; 0x0376; 0x0377; 1169 0x0378; 0x0379; 0x037A; 0x037B; 0x037C; 0x037D; 0x037E; 0x037F; 1170 (* 8 *) 0x0380; 0x0381; 0x0382; 0x0383; 0x0384; 0x0385; 0x0386; 0x0387; 1171 0x0388; 0x0389; 0x038A; 0x038B; 0x038C; 0x038D; 0x038E; 0x038F; 1172 (* 9 *) 0x0390; 0x03B1; 0x03B2; 0x03B3; 0x03B4; 0x03B5; 0x03B6; 0x03B7; 1173 0x03B8; 0x03B9; 0x03BA; 0x03BB; 0x03BC; 0x03BD; 0x03BE; 0x03BF; 1174 (* A *) 0x03C0; 0x03C1; 0x03A2; 0x03C3; 0x03C4; 0x03C5; 0x03C6; 0x03C7; 1175 0x03C8; 0x03C9; 0x03AA; 0x03AB; 0x03AC; 0x03AD; 0x03AE; 0x03AF; 1176 (* B *) 0x03B0; 0x03B1; 0x03B2; 0x03B3; 0x03B4; 0x03B5; 0x03B6; 0x03B7; 1177 0x03B8; 0x03B9; 0x03BA; 0x03BB; 0x03BC; 0x03BD; 0x03BE; 0x03BF; 1178 (* C *) 0x03C0; 0x03C1; 0x03C2; 0x03C3; 0x03C4; 0x03C5; 0x03C6; 0x03C7; 1179 0x03C8; 0x03C9; 0x03CA; 0x03CB; 0x03CC; 0x03CD; 0x03CE; 0x03CF; 1180 (* D *) 0x03D0; 0x03D1; 0x03D2; 0x03D3; 0x03D4; 0x03D5; 0x03D6; 0x03D7; 1181 0x03D8; 0x03D9; 0x03DA; 0x03DB; 0x03DC; 0x03DD; 0x03DE; 0x03DF; 1182 (* E *) 0x03E0; 0x03E1; 0x03E3; 0x03E3; 0x03E5; 0x03E5; 0x03E7; 0x03E7; 1183 0x03E9; 0x03E9; 0x03EB; 0x03EB; 0x03ED; 0x03ED; 0x03EF; 0x03EF; 1184 (* F *) 0x03F0; 0x03F1; 0x03F2; 0x03F3; 0x03F4; 0x03F5; 0x03F6; 0x03F7; 1185 0x03F8; 0x03F9; 0x03FA; 0x03FB; 0x03FC; 0x03FD; 0x03FE; 0x03FF; 1186 1187 (* Table 4 (for high byte 0x04) *) 1188 1189 (* 0 *) 0x0400; 0x0401; 0x0452; 0x0403; 0x0454; 0x0455; 0x0456; 0x0407; 1190 0x0458; 0x0459; 0x045A; 0x045B; 0x040C; 0x040D; 0x040E; 0x045F; 1191 (* 1 *) 0x0430; 0x0431; 0x0432; 0x0433; 0x0434; 0x0435; 0x0436; 0x0437; 1192 0x0438; 0x0419; 0x043A; 0x043B; 0x043C; 0x043D; 0x043E; 0x043F; 1193 (* 2 *) 0x0440; 0x0441; 0x0442; 0x0443; 0x0444; 0x0445; 0x0446; 0x0447; 1194 0x0448; 0x0449; 0x044A; 0x044B; 0x044C; 0x044D; 0x044E; 0x044F; 1195 (* 3 *) 0x0430; 0x0431; 0x0432; 0x0433; 0x0434; 0x0435; 0x0436; 0x0437; 1196 0x0438; 0x0439; 0x043A; 0x043B; 0x043C; 0x043D; 0x043E; 0x043F; 1197 (* 4 *) 0x0440; 0x0441; 0x0442; 0x0443; 0x0444; 0x0445; 0x0446; 0x0447; 1198 0x0448; 0x0449; 0x044A; 0x044B; 0x044C; 0x044D; 0x044E; 0x044F; 1199 (* 5 *) 0x0450; 0x0451; 0x0452; 0x0453; 0x0454; 0x0455; 0x0456; 0x0457; 1200 0x0458; 0x0459; 0x045A; 0x045B; 0x045C; 0x045D; 0x045E; 0x045F; 1201 (* 6 *) 0x0461; 0x0461; 0x0463; 0x0463; 0x0465; 0x0465; 0x0467; 0x0467; 1202 0x0469; 0x0469; 0x046B; 0x046B; 0x046D; 0x046D; 0x046F; 0x046F; 1203 (* 7 *) 0x0471; 0x0471; 0x0473; 0x0473; 0x0475; 0x0475; 0x0476; 0x0477; 1204 0x0479; 0x0479; 0x047B; 0x047B; 0x047D; 0x047D; 0x047F; 0x047F; 1205 (* 8 *) 0x0481; 0x0481; 0x0482; 0x0483; 0x0484; 0x0485; 0x0486; 0x0487; 1206 0x0488; 0x0489; 0x048A; 0x048B; 0x048C; 0x048D; 0x048E; 0x048F; 1207 (* 9 *) 0x0491; 0x0491; 0x0493; 0x0493; 0x0495; 0x0495; 0x0497; 0x0497; 1208 0x0499; 0x0499; 0x049B; 0x049B; 0x049D; 0x049D; 0x049F; 0x049F; 1209 (* A *) 0x04A1; 0x04A1; 0x04A3; 0x04A3; 0x04A5; 0x04A5; 0x04A7; 0x04A7; 1210 0x04A9; 0x04A9; 0x04AB; 0x04AB; 0x04AD; 0x04AD; 0x04AF; 0x04AF; 1211 (* B *) 0x04B1; 0x04B1; 0x04B3; 0x04B3; 0x04B5; 0x04B5; 0x04B7; 0x04B7; 1212 0x04B9; 0x04B9; 0x04BB; 0x04BB; 0x04BD; 0x04BD; 0x04BF; 0x04BF; 1213 (* C *) 0x04C0; 0x04C1; 0x04C2; 0x04C4; 0x04C4; 0x04C5; 0x04C6; 0x04C8; 1214 0x04C8; 0x04C9; 0x04CA; 0x04CC; 0x04CC; 0x04CD; 0x04CE; 0x04CF; 1215 (* D *) 0x04D0; 0x04D1; 0x04D2; 0x04D3; 0x04D4; 0x04D5; 0x04D6; 0x04D7; 1216 0x04D8; 0x04D9; 0x04DA; 0x04DB; 0x04DC; 0x04DD; 0x04DE; 0x04DF; 1217 (* E *) 0x04E0; 0x04E1; 0x04E2; 0x04E3; 0x04E4; 0x04E5; 0x04E6; 0x04E7; 1218 0x04E8; 0x04E9; 0x04EA; 0x04EB; 0x04EC; 0x04ED; 0x04EE; 0x04EF; 1219 (* F *) 0x04F0; 0x04F1; 0x04F2; 0x04F3; 0x04F4; 0x04F5; 0x04F6; 0x04F7; 1220 0x04F8; 0x04F9; 0x04FA; 0x04FB; 0x04FC; 0x04FD; 0x04FE; 0x04FF; 1221 1222 (* Table 5 (for high byte 0x05) *) 1223 1224 (* 0 *) 0x0500; 0x0501; 0x0502; 0x0503; 0x0504; 0x0505; 0x0506; 0x0507; 1225 0x0508; 0x0509; 0x050A; 0x050B; 0x050C; 0x050D; 0x050E; 0x050F; 1226 (* 1 *) 0x0510; 0x0511; 0x0512; 0x0513; 0x0514; 0x0515; 0x0516; 0x0517; 1227 0x0518; 0x0519; 0x051A; 0x051B; 0x051C; 0x051D; 0x051E; 0x051F; 1228 (* 2 *) 0x0520; 0x0521; 0x0522; 0x0523; 0x0524; 0x0525; 0x0526; 0x0527; 1229 0x0528; 0x0529; 0x052A; 0x052B; 0x052C; 0x052D; 0x052E; 0x052F; 1230 (* 3 *) 0x0530; 0x0561; 0x0562; 0x0563; 0x0564; 0x0565; 0x0566; 0x0567; 1231 0x0568; 0x0569; 0x056A; 0x056B; 0x056C; 0x056D; 0x056E; 0x056F; 1232 (* 4 *) 0x0570; 0x0571; 0x0572; 0x0573; 0x0574; 0x0575; 0x0576; 0x0577; 1233 0x0578; 0x0579; 0x057A; 0x057B; 0x057C; 0x057D; 0x057E; 0x057F; 1234 (* 5 *) 0x0580; 0x0581; 0x0582; 0x0583; 0x0584; 0x0585; 0x0586; 0x0557; 1235 0x0558; 0x0559; 0x055A; 0x055B; 0x055C; 0x055D; 0x055E; 0x055F; 1236 (* 6 *) 0x0560; 0x0561; 0x0562; 0x0563; 0x0564; 0x0565; 0x0566; 0x0567; 1237 0x0568; 0x0569; 0x056A; 0x056B; 0x056C; 0x056D; 0x056E; 0x056F; 1238 (* 7 *) 0x0570; 0x0571; 0x0572; 0x0573; 0x0574; 0x0575; 0x0576; 0x0577; 1239 0x0578; 0x0579; 0x057A; 0x057B; 0x057C; 0x057D; 0x057E; 0x057F; 1240 (* 8 *) 0x0580; 0x0581; 0x0582; 0x0583; 0x0584; 0x0585; 0x0586; 0x0587; 1241 0x0588; 0x0589; 0x058A; 0x058B; 0x058C; 0x058D; 0x058E; 0x058F; 1242 (* 9 *) 0x0590; 0x0591; 0x0592; 0x0593; 0x0594; 0x0595; 0x0596; 0x0597; 1243 0x0598; 0x0599; 0x059A; 0x059B; 0x059C; 0x059D; 0x059E; 0x059F; 1244 (* A *) 0x05A0; 0x05A1; 0x05A2; 0x05A3; 0x05A4; 0x05A5; 0x05A6; 0x05A7; 1245 0x05A8; 0x05A9; 0x05AA; 0x05AB; 0x05AC; 0x05AD; 0x05AE; 0x05AF; 1246 (* B *) 0x05B0; 0x05B1; 0x05B2; 0x05B3; 0x05B4; 0x05B5; 0x05B6; 0x05B7; 1247 0x05B8; 0x05B9; 0x05BA; 0x05BB; 0x05BC; 0x05BD; 0x05BE; 0x05BF; 1248 (* C *) 0x05C0; 0x05C1; 0x05C2; 0x05C3; 0x05C4; 0x05C5; 0x05C6; 0x05C7; 1249 0x05C8; 0x05C9; 0x05CA; 0x05CB; 0x05CC; 0x05CD; 0x05CE; 0x05CF; 1250 (* D *) 0x05D0; 0x05D1; 0x05D2; 0x05D3; 0x05D4; 0x05D5; 0x05D6; 0x05D7; 1251 0x05D8; 0x05D9; 0x05DA; 0x05DB; 0x05DC; 0x05DD; 0x05DE; 0x05DF; 1252 (* E *) 0x05E0; 0x05E1; 0x05E2; 0x05E3; 0x05E4; 0x05E5; 0x05E6; 0x05E7; 1253 0x05E8; 0x05E9; 0x05EA; 0x05EB; 0x05EC; 0x05ED; 0x05EE; 0x05EF; 1254 (* F *) 0x05F0; 0x05F1; 0x05F2; 0x05F3; 0x05F4; 0x05F5; 0x05F6; 0x05F7; 1255 0x05F8; 0x05F9; 0x05FA; 0x05FB; 0x05FC; 0x05FD; 0x05FE; 0x05FF; 1256 1257 (* Table 6 (for high byte 0x10) *) 1258 1259 (* 0 *) 0x1000; 0x1001; 0x1002; 0x1003; 0x1004; 0x1005; 0x1006; 0x1007; 1260 0x1008; 0x1009; 0x100A; 0x100B; 0x100C; 0x100D; 0x100E; 0x100F; 1261 (* 1 *) 0x1010; 0x1011; 0x1012; 0x1013; 0x1014; 0x1015; 0x1016; 0x1017; 1262 0x1018; 0x1019; 0x101A; 0x101B; 0x101C; 0x101D; 0x101E; 0x101F; 1263 (* 2 *) 0x1020; 0x1021; 0x1022; 0x1023; 0x1024; 0x1025; 0x1026; 0x1027; 1264 0x1028; 0x1029; 0x102A; 0x102B; 0x102C; 0x102D; 0x102E; 0x102F; 1265 (* 3 *) 0x1030; 0x1031; 0x1032; 0x1033; 0x1034; 0x1035; 0x1036; 0x1037; 1266 0x1038; 0x1039; 0x103A; 0x103B; 0x103C; 0x103D; 0x103E; 0x103F; 1267 (* 4 *) 0x1040; 0x1041; 0x1042; 0x1043; 0x1044; 0x1045; 0x1046; 0x1047; 1268 0x1048; 0x1049; 0x104A; 0x104B; 0x104C; 0x104D; 0x104E; 0x104F; 1269 (* 5 *) 0x1050; 0x1051; 0x1052; 0x1053; 0x1054; 0x1055; 0x1056; 0x1057; 1270 0x1058; 0x1059; 0x105A; 0x105B; 0x105C; 0x105D; 0x105E; 0x105F; 1271 (* 6 *) 0x1060; 0x1061; 0x1062; 0x1063; 0x1064; 0x1065; 0x1066; 0x1067; 1272 0x1068; 0x1069; 0x106A; 0x106B; 0x106C; 0x106D; 0x106E; 0x106F; 1273 (* 7 *) 0x1070; 0x1071; 0x1072; 0x1073; 0x1074; 0x1075; 0x1076; 0x1077; 1274 0x1078; 0x1079; 0x107A; 0x107B; 0x107C; 0x107D; 0x107E; 0x107F; 1275 (* 8 *) 0x1080; 0x1081; 0x1082; 0x1083; 0x1084; 0x1085; 0x1086; 0x1087; 1276 0x1088; 0x1089; 0x108A; 0x108B; 0x108C; 0x108D; 0x108E; 0x108F; 1277 (* 9 *) 0x1090; 0x1091; 0x1092; 0x1093; 0x1094; 0x1095; 0x1096; 0x1097; 1278 0x1098; 0x1099; 0x109A; 0x109B; 0x109C; 0x109D; 0x109E; 0x109F; 1279 (* A *) 0x10D0; 0x10D1; 0x10D2; 0x10D3; 0x10D4; 0x10D5; 0x10D6; 0x10D7; 1280 0x10D8; 0x10D9; 0x10DA; 0x10DB; 0x10DC; 0x10DD; 0x10DE; 0x10DF; 1281 (* B *) 0x10E0; 0x10E1; 0x10E2; 0x10E3; 0x10E4; 0x10E5; 0x10E6; 0x10E7; 1282 0x10E8; 0x10E9; 0x10EA; 0x10EB; 0x10EC; 0x10ED; 0x10EE; 0x10EF; 1283 (* C *) 0x10F0; 0x10F1; 0x10F2; 0x10F3; 0x10F4; 0x10F5; 0x10C6; 0x10C7; 1284 0x10C8; 0x10C9; 0x10CA; 0x10CB; 0x10CC; 0x10CD; 0x10CE; 0x10CF; 1285 (* D *) 0x10D0; 0x10D1; 0x10D2; 0x10D3; 0x10D4; 0x10D5; 0x10D6; 0x10D7; 1286 0x10D8; 0x10D9; 0x10DA; 0x10DB; 0x10DC; 0x10DD; 0x10DE; 0x10DF; 1287 (* E *) 0x10E0; 0x10E1; 0x10E2; 0x10E3; 0x10E4; 0x10E5; 0x10E6; 0x10E7; 1288 0x10E8; 0x10E9; 0x10EA; 0x10EB; 0x10EC; 0x10ED; 0x10EE; 0x10EF; 1289 (* F *) 0x10F0; 0x10F1; 0x10F2; 0x10F3; 0x10F4; 0x10F5; 0x10F6; 0x10F7; 1290 0x10F8; 0x10F9; 0x10FA; 0x10FB; 0x10FC; 0x10FD; 0x10FE; 0x10FF; 1291 1292 (* Table 7 (for high byte 0x20) *) 1293 1294 (* 0 *) 0x2000; 0x2001; 0x2002; 0x2003; 0x2004; 0x2005; 0x2006; 0x2007; 1295 0x2008; 0x2009; 0x200A; 0x200B; 0x0000; 0x0000; 0x0000; 0x0000; 1296 (* 1 *) 0x2010; 0x2011; 0x2012; 0x2013; 0x2014; 0x2015; 0x2016; 0x2017; 1297 0x2018; 0x2019; 0x201A; 0x201B; 0x201C; 0x201D; 0x201E; 0x201F; 1298 (* 2 *) 0x2020; 0x2021; 0x2022; 0x2023; 0x2024; 0x2025; 0x2026; 0x2027; 1299 0x2028; 0x2029; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x202F; 1300 (* 3 *) 0x2030; 0x2031; 0x2032; 0x2033; 0x2034; 0x2035; 0x2036; 0x2037; 1301 0x2038; 0x2039; 0x203A; 0x203B; 0x203C; 0x203D; 0x203E; 0x203F; 1302 (* 4 *) 0x2040; 0x2041; 0x2042; 0x2043; 0x2044; 0x2045; 0x2046; 0x2047; 1303 0x2048; 0x2049; 0x204A; 0x204B; 0x204C; 0x204D; 0x204E; 0x204F; 1304 (* 5 *) 0x2050; 0x2051; 0x2052; 0x2053; 0x2054; 0x2055; 0x2056; 0x2057; 1305 0x2058; 0x2059; 0x205A; 0x205B; 0x205C; 0x205D; 0x205E; 0x205F; 1306 (* 6 *) 0x2060; 0x2061; 0x2062; 0x2063; 0x2064; 0x2065; 0x2066; 0x2067; 1307 0x2068; 0x2069; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 0x0000; 1308 (* 7 *) 0x2070; 0x2071; 0x2072; 0x2073; 0x2074; 0x2075; 0x2076; 0x2077; 1309 0x2078; 0x2079; 0x207A; 0x207B; 0x207C; 0x207D; 0x207E; 0x207F; 1310 (* 8 *) 0x2080; 0x2081; 0x2082; 0x2083; 0x2084; 0x2085; 0x2086; 0x2087; 1311 0x2088; 0x2089; 0x208A; 0x208B; 0x208C; 0x208D; 0x208E; 0x208F; 1312 (* 9 *) 0x2090; 0x2091; 0x2092; 0x2093; 0x2094; 0x2095; 0x2096; 0x2097; 1313 0x2098; 0x2099; 0x209A; 0x209B; 0x209C; 0x209D; 0x209E; 0x209F; 1314 (* A *) 0x20A0; 0x20A1; 0x20A2; 0x20A3; 0x20A4; 0x20A5; 0x20A6; 0x20A7; 1315 0x20A8; 0x20A9; 0x20AA; 0x20AB; 0x20AC; 0x20AD; 0x20AE; 0x20AF; 1316 (* B *) 0x20B0; 0x20B1; 0x20B2; 0x20B3; 0x20B4; 0x20B5; 0x20B6; 0x20B7; 1317 0x20B8; 0x20B9; 0x20BA; 0x20BB; 0x20BC; 0x20BD; 0x20BE; 0x20BF; 1318 (* C *) 0x20C0; 0x20C1; 0x20C2; 0x20C3; 0x20C4; 0x20C5; 0x20C6; 0x20C7; 1319 0x20C8; 0x20C9; 0x20CA; 0x20CB; 0x20CC; 0x20CD; 0x20CE; 0x20CF; 1320 (* D *) 0x20D0; 0x20D1; 0x20D2; 0x20D3; 0x20D4; 0x20D5; 0x20D6; 0x20D7; 1321 0x20D8; 0x20D9; 0x20DA; 0x20DB; 0x20DC; 0x20DD; 0x20DE; 0x20DF; 1322 (* E *) 0x20E0; 0x20E1; 0x20E2; 0x20E3; 0x20E4; 0x20E5; 0x20E6; 0x20E7; 1323 0x20E8; 0x20E9; 0x20EA; 0x20EB; 0x20EC; 0x20ED; 0x20EE; 0x20EF; 1324 (* F *) 0x20F0; 0x20F1; 0x20F2; 0x20F3; 0x20F4; 0x20F5; 0x20F6; 0x20F7; 1325 0x20F8; 0x20F9; 0x20FA; 0x20FB; 0x20FC; 0x20FD; 0x20FE; 0x20FF; 1326 1327 (* Table 8 (for high byte 0x21) *) 1328 1329 (* 0 *) 0x2100; 0x2101; 0x2102; 0x2103; 0x2104; 0x2105; 0x2106; 0x2107; 1330 0x2108; 0x2109; 0x210A; 0x210B; 0x210C; 0x210D; 0x210E; 0x210F; 1331 (* 1 *) 0x2110; 0x2111; 0x2112; 0x2113; 0x2114; 0x2115; 0x2116; 0x2117; 1332 0x2118; 0x2119; 0x211A; 0x211B; 0x211C; 0x211D; 0x211E; 0x211F; 1333 (* 2 *) 0x2120; 0x2121; 0x2122; 0x2123; 0x2124; 0x2125; 0x2126; 0x2127; 1334 0x2128; 0x2129; 0x212A; 0x212B; 0x212C; 0x212D; 0x212E; 0x212F; 1335 (* 3 *) 0x2130; 0x2131; 0x2132; 0x2133; 0x2134; 0x2135; 0x2136; 0x2137; 1336 0x2138; 0x2139; 0x213A; 0x213B; 0x213C; 0x213D; 0x213E; 0x213F; 1337 (* 4 *) 0x2140; 0x2141; 0x2142; 0x2143; 0x2144; 0x2145; 0x2146; 0x2147; 1338 0x2148; 0x2149; 0x214A; 0x214B; 0x214C; 0x214D; 0x214E; 0x214F; 1339 (* 5 *) 0x2150; 0x2151; 0x2152; 0x2153; 0x2154; 0x2155; 0x2156; 0x2157; 1340 0x2158; 0x2159; 0x215A; 0x215B; 0x215C; 0x215D; 0x215E; 0x215F; 1341 (* 6 *) 0x2170; 0x2171; 0x2172; 0x2173; 0x2174; 0x2175; 0x2176; 0x2177; 1342 0x2178; 0x2179; 0x217A; 0x217B; 0x217C; 0x217D; 0x217E; 0x217F; 1343 (* 7 *) 0x2170; 0x2171; 0x2172; 0x2173; 0x2174; 0x2175; 0x2176; 0x2177; 1344 0x2178; 0x2179; 0x217A; 0x217B; 0x217C; 0x217D; 0x217E; 0x217F; 1345 (* 8 *) 0x2180; 0x2181; 0x2182; 0x2183; 0x2184; 0x2185; 0x2186; 0x2187; 1346 0x2188; 0x2189; 0x218A; 0x218B; 0x218C; 0x218D; 0x218E; 0x218F; 1347 (* 9 *) 0x2190; 0x2191; 0x2192; 0x2193; 0x2194; 0x2195; 0x2196; 0x2197; 1348 0x2198; 0x2199; 0x219A; 0x219B; 0x219C; 0x219D; 0x219E; 0x219F; 1349 (* A *) 0x21A0; 0x21A1; 0x21A2; 0x21A3; 0x21A4; 0x21A5; 0x21A6; 0x21A7; 1350 0x21A8; 0x21A9; 0x21AA; 0x21AB; 0x21AC; 0x21AD; 0x21AE; 0x21AF; 1351 (* B *) 0x21B0; 0x21B1; 0x21B2; 0x21B3; 0x21B4; 0x21B5; 0x21B6; 0x21B7; 1352 0x21B8; 0x21B9; 0x21BA; 0x21BB; 0x21BC; 0x21BD; 0x21BE; 0x21BF; 1353 (* C *) 0x21C0; 0x21C1; 0x21C2; 0x21C3; 0x21C4; 0x21C5; 0x21C6; 0x21C7; 1354 0x21C8; 0x21C9; 0x21CA; 0x21CB; 0x21CC; 0x21CD; 0x21CE; 0x21CF; 1355 (* D *) 0x21D0; 0x21D1; 0x21D2; 0x21D3; 0x21D4; 0x21D5; 0x21D6; 0x21D7; 1356 0x21D8; 0x21D9; 0x21DA; 0x21DB; 0x21DC; 0x21DD; 0x21DE; 0x21DF; 1357 (* E *) 0x21E0; 0x21E1; 0x21E2; 0x21E3; 0x21E4; 0x21E5; 0x21E6; 0x21E7; 1358 0x21E8; 0x21E9; 0x21EA; 0x21EB; 0x21EC; 0x21ED; 0x21EE; 0x21EF; 1359 (* F *) 0x21F0; 0x21F1; 0x21F2; 0x21F3; 0x21F4; 0x21F5; 0x21F6; 0x21F7; 1360 0x21F8; 0x21F9; 0x21FA; 0x21FB; 0x21FC; 0x21FD; 0x21FE; 0x21FF; 1361 1362 (* Table 9 (for high byte 0xFE) *) 1363 1364 (* 0 *) 0xFE00; 0xFE01; 0xFE02; 0xFE03; 0xFE04; 0xFE05; 0xFE06; 0xFE07; 1365 0xFE08; 0xFE09; 0xFE0A; 0xFE0B; 0xFE0C; 0xFE0D; 0xFE0E; 0xFE0F; 1366 (* 1 *) 0xFE10; 0xFE11; 0xFE12; 0xFE13; 0xFE14; 0xFE15; 0xFE16; 0xFE17; 1367 0xFE18; 0xFE19; 0xFE1A; 0xFE1B; 0xFE1C; 0xFE1D; 0xFE1E; 0xFE1F; 1368 (* 2 *) 0xFE20; 0xFE21; 0xFE22; 0xFE23; 0xFE24; 0xFE25; 0xFE26; 0xFE27; 1369 0xFE28; 0xFE29; 0xFE2A; 0xFE2B; 0xFE2C; 0xFE2D; 0xFE2E; 0xFE2F; 1370 (* 3 *) 0xFE30; 0xFE31; 0xFE32; 0xFE33; 0xFE34; 0xFE35; 0xFE36; 0xFE37; 1371 0xFE38; 0xFE39; 0xFE3A; 0xFE3B; 0xFE3C; 0xFE3D; 0xFE3E; 0xFE3F; 1372 (* 4 *) 0xFE40; 0xFE41; 0xFE42; 0xFE43; 0xFE44; 0xFE45; 0xFE46; 0xFE47; 1373 0xFE48; 0xFE49; 0xFE4A; 0xFE4B; 0xFE4C; 0xFE4D; 0xFE4E; 0xFE4F; 1374 (* 5 *) 0xFE50; 0xFE51; 0xFE52; 0xFE53; 0xFE54; 0xFE55; 0xFE56; 0xFE57; 1375 0xFE58; 0xFE59; 0xFE5A; 0xFE5B; 0xFE5C; 0xFE5D; 0xFE5E; 0xFE5F; 1376 (* 6 *) 0xFE60; 0xFE61; 0xFE62; 0xFE63; 0xFE64; 0xFE65; 0xFE66; 0xFE67; 1377 0xFE68; 0xFE69; 0xFE6A; 0xFE6B; 0xFE6C; 0xFE6D; 0xFE6E; 0xFE6F; 1378 (* 7 *) 0xFE70; 0xFE71; 0xFE72; 0xFE73; 0xFE74; 0xFE75; 0xFE76; 0xFE77; 1379 0xFE78; 0xFE79; 0xFE7A; 0xFE7B; 0xFE7C; 0xFE7D; 0xFE7E; 0xFE7F; 1380 (* 8 *) 0xFE80; 0xFE81; 0xFE82; 0xFE83; 0xFE84; 0xFE85; 0xFE86; 0xFE87; 1381 0xFE88; 0xFE89; 0xFE8A; 0xFE8B; 0xFE8C; 0xFE8D; 0xFE8E; 0xFE8F; 1382 (* 9 *) 0xFE90; 0xFE91; 0xFE92; 0xFE93; 0xFE94; 0xFE95; 0xFE96; 0xFE97; 1383 0xFE98; 0xFE99; 0xFE9A; 0xFE9B; 0xFE9C; 0xFE9D; 0xFE9E; 0xFE9F; 1384 (* A *) 0xFEA0; 0xFEA1; 0xFEA2; 0xFEA3; 0xFEA4; 0xFEA5; 0xFEA6; 0xFEA7; 1385 0xFEA8; 0xFEA9; 0xFEAA; 0xFEAB; 0xFEAC; 0xFEAD; 0xFEAE; 0xFEAF; 1386 (* B *) 0xFEB0; 0xFEB1; 0xFEB2; 0xFEB3; 0xFEB4; 0xFEB5; 0xFEB6; 0xFEB7; 1387 0xFEB8; 0xFEB9; 0xFEBA; 0xFEBB; 0xFEBC; 0xFEBD; 0xFEBE; 0xFEBF; 1388 (* C *) 0xFEC0; 0xFEC1; 0xFEC2; 0xFEC3; 0xFEC4; 0xFEC5; 0xFEC6; 0xFEC7; 1389 0xFEC8; 0xFEC9; 0xFECA; 0xFECB; 0xFECC; 0xFECD; 0xFECE; 0xFECF; 1390 (* D *) 0xFED0; 0xFED1; 0xFED2; 0xFED3; 0xFED4; 0xFED5; 0xFED6; 0xFED7; 1391 0xFED8; 0xFED9; 0xFEDA; 0xFEDB; 0xFEDC; 0xFEDD; 0xFEDE; 0xFEDF; 1392 (* E *) 0xFEE0; 0xFEE1; 0xFEE2; 0xFEE3; 0xFEE4; 0xFEE5; 0xFEE6; 0xFEE7; 1393 0xFEE8; 0xFEE9; 0xFEEA; 0xFEEB; 0xFEEC; 0xFEED; 0xFEEE; 0xFEEF; 1394 (* F *) 0xFEF0; 0xFEF1; 0xFEF2; 0xFEF3; 0xFEF4; 0xFEF5; 0xFEF6; 0xFEF7; 1395 0xFEF8; 0xFEF9; 0xFEFA; 0xFEFB; 0xFEFC; 0xFEFD; 0xFEFE; 0x0000; 1396 1397 (* Table 10 (for high byte 0xFF) *) 1398 1399 (* 0 *) 0xFF00; 0xFF01; 0xFF02; 0xFF03; 0xFF04; 0xFF05; 0xFF06; 0xFF07; 1400 0xFF08; 0xFF09; 0xFF0A; 0xFF0B; 0xFF0C; 0xFF0D; 0xFF0E; 0xFF0F; 1401 (* 1 *) 0xFF10; 0xFF11; 0xFF12; 0xFF13; 0xFF14; 0xFF15; 0xFF16; 0xFF17; 1402 0xFF18; 0xFF19; 0xFF1A; 0xFF1B; 0xFF1C; 0xFF1D; 0xFF1E; 0xFF1F; 1403 (* 2 *) 0xFF20; 0xFF41; 0xFF42; 0xFF43; 0xFF44; 0xFF45; 0xFF46; 0xFF47; 1404 0xFF48; 0xFF49; 0xFF4A; 0xFF4B; 0xFF4C; 0xFF4D; 0xFF4E; 0xFF4F; 1405 (* 3 *) 0xFF50; 0xFF51; 0xFF52; 0xFF53; 0xFF54; 0xFF55; 0xFF56; 0xFF57; 1406 0xFF58; 0xFF59; 0xFF5A; 0xFF3B; 0xFF3C; 0xFF3D; 0xFF3E; 0xFF3F; 1407 (* 4 *) 0xFF40; 0xFF41; 0xFF42; 0xFF43; 0xFF44; 0xFF45; 0xFF46; 0xFF47; 1408 0xFF48; 0xFF49; 0xFF4A; 0xFF4B; 0xFF4C; 0xFF4D; 0xFF4E; 0xFF4F; 1409 (* 5 *) 0xFF50; 0xFF51; 0xFF52; 0xFF53; 0xFF54; 0xFF55; 0xFF56; 0xFF57; 1410 0xFF58; 0xFF59; 0xFF5A; 0xFF5B; 0xFF5C; 0xFF5D; 0xFF5E; 0xFF5F; 1411 (* 6 *) 0xFF60; 0xFF61; 0xFF62; 0xFF63; 0xFF64; 0xFF65; 0xFF66; 0xFF67; 1412 0xFF68; 0xFF69; 0xFF6A; 0xFF6B; 0xFF6C; 0xFF6D; 0xFF6E; 0xFF6F; 1413 (* 7 *) 0xFF70; 0xFF71; 0xFF72; 0xFF73; 0xFF74; 0xFF75; 0xFF76; 0xFF77; 1414 0xFF78; 0xFF79; 0xFF7A; 0xFF7B; 0xFF7C; 0xFF7D; 0xFF7E; 0xFF7F; 1415 (* 8 *) 0xFF80; 0xFF81; 0xFF82; 0xFF83; 0xFF84; 0xFF85; 0xFF86; 0xFF87; 1416 0xFF88; 0xFF89; 0xFF8A; 0xFF8B; 0xFF8C; 0xFF8D; 0xFF8E; 0xFF8F; 1417 (* 9 *) 0xFF90; 0xFF91; 0xFF92; 0xFF93; 0xFF94; 0xFF95; 0xFF96; 0xFF97; 1418 0xFF98; 0xFF99; 0xFF9A; 0xFF9B; 0xFF9C; 0xFF9D; 0xFF9E; 0xFF9F; 1419 (* A *) 0xFFA0; 0xFFA1; 0xFFA2; 0xFFA3; 0xFFA4; 0xFFA5; 0xFFA6; 0xFFA7; 1420 0xFFA8; 0xFFA9; 0xFFAA; 0xFFAB; 0xFFAC; 0xFFAD; 0xFFAE; 0xFFAF; 1421 (* B *) 0xFFB0; 0xFFB1; 0xFFB2; 0xFFB3; 0xFFB4; 0xFFB5; 0xFFB6; 0xFFB7; 1422 0xFFB8; 0xFFB9; 0xFFBA; 0xFFBB; 0xFFBC; 0xFFBD; 0xFFBE; 0xFFBF; 1423 (* C *) 0xFFC0; 0xFFC1; 0xFFC2; 0xFFC3; 0xFFC4; 0xFFC5; 0xFFC6; 0xFFC7; 1424 0xFFC8; 0xFFC9; 0xFFCA; 0xFFCB; 0xFFCC; 0xFFCD; 0xFFCE; 0xFFCF; 1425 (* D *) 0xFFD0; 0xFFD1; 0xFFD2; 0xFFD3; 0xFFD4; 0xFFD5; 0xFFD6; 0xFFD7; 1426 0xFFD8; 0xFFD9; 0xFFDA; 0xFFDB; 0xFFDC; 0xFFDD; 0xFFDE; 0xFFDF; 1427 (* E *) 0xFFE0; 0xFFE1; 0xFFE2; 0xFFE3; 0xFFE4; 0xFFE5; 0xFFE6; 0xFFE7; 1428 0xFFE8; 0xFFE9; 0xFFEA; 0xFFEB; 0xFFEC; 0xFFED; 0xFFEE; 0xFFEF; 1429 (* F *) 0xFFF0; 0xFFF1; 0xFFF2; 0xFFF3; 0xFFF4; 0xFFF5; 0xFFF6; 0xFFF7; 1430 0xFFF8; 0xFFF9; 0xFFFA; 0xFFFB; 0xFFFC; 0xFFFD; 0xFFFE; 0xFFFF; 1431 |] 1432 1433 (****) 1434 1435 let bitmap_test base bitmap character = 1436 character >= base 1437 && 1438 (let value = bitmap.((character lsr 8) land 0xFF) in 1439 value = 0xFF 1440 || 1441 (value <> 0 1442 && 1443 bitmap.((value - 1) * 32 + 256 + (character land 0xFF) / 8) 1444 land (1 lsl (character mod 8)) <> 0)) 1445 1446 let unicode_combinable character = 1447 bitmap_test 0x0300 uniCharCombiningBitmap character 1448 1449 let unicode_decomposeable character = 1450 bitmap_test 0x00C0 uniCharDecomposableBitmap character 1451 1452 (****) 1453 1454 let decompose_map = empty () 1455 1456 let hangul_sbase = 0xAC00 1457 let hangul_lbase = 0x1100 1458 let hangul_vbase = 0x1161 1459 let hangul_tbase = 0x11A7 1460 1461 let hangul_scount = 11172 1462 let hangul_lcount = 19 1463 let hangul_vcount = 21 1464 let hangul_tcount = 28 1465 let hangul_ncount = hangul_vcount * hangul_tcount 1466 1467 let convert_hangul character = 1468 let character = character - hangul_sbase in 1469 (* length = (character % HANGUL_TCOUNT ? 3 : 2); *) 1470 let length = if character mod hangul_tcount = 0 then 2 else 3 in 1471 (character / hangul_ncount + hangul_lbase :: 1472 (character mod hangul_ncount) / hangul_tcount + hangul_vbase :: 1473 if length = 2 then [] else 1474 [(character mod hangul_tcount) + hangul_tbase]) 1475 1476 let _ = 1477 (* Note that there is an off-by-one bug in vfs_utfconv.c *) 1478 (* This is not an issue as the last character is not marked 1479 as decomposeable in the bitmap *) 1480 assert (not (unicode_decomposeable (hangul_sbase + hangul_scount))); 1481 for character = hangul_sbase to hangul_sbase + hangul_scount - 1 do 1482 let l = convert_hangul character in 1483 (* add decompose_map character l;*) 1484 assert (unicode_decomposeable character) 1485 done 1486 1487 (****) 1488 1489 let extractCount value = (value lsr 12) land 0x0007 1490 1491 let recursiveDecomposition = 1 lsl 15 1492 1493 let _ = 1494 let rec get_multiple i l = 1495 if l = 0 then [] else 1496 uniCharMultipleDecompositionTable.(i) :: get_multiple (i + 1) (l - 1) 1497 in 1498 let tbl = uniCharDecompositionTable in 1499 1500 let rec decode v = 1501 let l = extractCount v in 1502 let ch = v land 0xFFF in 1503 let recurs = v land recursiveDecomposition <> 0 in 1504 let s = if l = 1 then [ch] else get_multiple ch l in 1505 if recurs then 1506 match s with 1507 [] -> 1508 assert false 1509 | ch :: r -> 1510 decompose ch 0 @ r 1511 else 1512 s 1513 and decompose ch i = 1514 if tbl.(2 * i) = ch then decode tbl.(2 * i + 1) else 1515 decompose ch (i + 1) 1516 in 1517 1518 let len = Array.length tbl / 2 in 1519 for i = 0 to len - 1 do 1520 let ch = tbl.(i * 2) in 1521 let v = tbl.(i * 2 + 1) in 1522 add decompose_map ch (decode v); 1523 assert (unicode_decomposeable ch) 1524 done 1525 1526 let _ = 1527 let tbl = uniCharDecompositionTable in 1528 for c = 0 to 0xffff do 1529 if 1530 unicode_decomposeable c && 1531 (c < hangul_sbase || c >= hangul_sbase + hangul_scount) 1532 then begin 1533 let found = ref false in 1534 for i = 0 to (Array.length tbl) / 2 - 1 do 1535 if tbl.(i * 2) = c then found := true 1536 done; 1537 assert !found 1538 end 1539 done 1540 1541 (* 1542 let _ = 1543 IntMap.iter (fun c l -> Format.printf "%a -> %a@." print_uni c print_chars l) 1544 !decompose_map; 1545 exit 0 1546 *) 1547 1548 (****) 1549 let compose_map = empty () 1550 1551 let add_comp m c v = 1552 let l = try IntMap.find c !m with Not_found -> ref [] in 1553 l := v :: !l; 1554 m := IntMap.add c l !m 1555 1556 let _ = 1557 let t1 = uniCharPrecompSourceTable in 1558 let t2 = uniCharBMPPrecompDestinationTable in 1559 for i = 0 to Array.length t1 / 2 - 1 do 1560 let c = t1.(2 * i) in 1561 let v = t1.(2 * i + 1) in 1562 let j = v land 0xFFFF in 1563 let l = v lsr 16 in 1564 for j = j to j + l - 1 do 1565 add_comp compose_map c (t2.(2 * j), t2.(2 * j + 1)); 1566 (* 1567 Format.printf "%a %a -> %a@." 1568 print_uni t2.(2 * j) print_uni c print_uni t2.(2 * j + 1) 1569 *) 1570 done 1571 done 1572 1573 (****) 1574 1575 let lower_map = empty () 1576 1577 let _ = 1578 for i = 0 to 255 do 1579 let c1 = lowerCaseTable.(i) in 1580 if c1 <> 0 then begin 1581 for j = 0 to 255 do 1582 let c2 = lowerCaseTable.(j + c1) in 1583 let c = i * 256 + j in 1584 if c2 = 0 then 1585 add lower_map c [] 1586 else if c <> c2 then 1587 add lower_map c [c2] 1588 done 1589 end 1590 done 1591 1592 (* 1593 let _ = 1594 IntMap.iter (fun c l -> Format.printf "%a -> %a@." print_uni c print_chars l) 1595 !lower_map; 1596 exit 0 1597 *) 1598 1599 (****) 1600 1601 (* Support for Microsoft Windows NT Services for Macintosh (SFM) 1602 convention (http://support.microsoft.com/kb/q117258) *) 1603 1604 let alternative_table = 1605 [('\x01', 0xf001); ('\x02', 0xf002); ('\x03', 0xf003); 1606 ('\x04', 0xf004); ('\x05', 0xf005); ('\x06', 0xf006); ('\x07', 0xf007); 1607 ('\x08', 0xf008); ('\x09', 0xf009); ('\x0a', 0xf00a); ('\x0b', 0xf00b); 1608 ('\x0c', 0xf00c); ('\x0d', 0xf00d); ('\x0e', 0xf00e); ('\x0f', 0xf00f); 1609 ('\x10', 0xf010); ('\x11', 0xf011); ('\x12', 0xf012); ('\x13', 0xf013); 1610 ('\x14', 0xf014); ('\x15', 0xf015); ('\x16', 0xf016); ('\x17', 0xf017); 1611 ('\x18', 0xf018); ('\x19', 0xf019); ('\x1a', 0xf01a); ('\x1b', 0xf01b); 1612 ('\x1c', 0xf01c); ('\x1d', 0xf01d); ('\x1e', 0xf01e); ('\x1f', 0xf01f); 1613 ('"', 0xf020); ('*', 0xf021); (':', 0xf022); ('<', 0xf023); ('>', 0xf024); 1614 ('?', 0xf025); ('\\', 0xf026); ('|', 0xf027); (' ', 0xf028); ('.', 0xf029)] 1615 1616 let _ = 1617 List.iter (fun (c, c') -> add decompose_map c' [Char.code c]) alternative_table 1618 1619 (****) 1620 1621 (* In Samba but not in MacOSX *) 1622 1623 let missing_lower = 1624 [(0x03c2, 0x03c3); (0x04d4, 0x04d5); (0x04d8, 0x04d9); (0x04e0, 0x04e1); 1625 (0x04e8, 0x04e9); (0x24b6, 0x24d0); (0x24b7, 0x24d1); (0x24b8, 0x24d2); 1626 (0x24b9, 0x24d3); (0x24ba, 0x24d4); (0x24bb, 0x24d5); (0x24bc, 0x24d6); 1627 (0x24bd, 0x24d7); (0x24be, 0x24d8); (0x24bf, 0x24d9); (0x24c0, 0x24da); 1628 (0x24c1, 0x24db); (0x24c2, 0x24dc); (0x24c3, 0x24dd); (0x24c4, 0x24de); 1629 (0x24c5, 0x24df); (0x24c6, 0x24e0); (0x24c7, 0x24e1); (0x24c8, 0x24e2); 1630 (0x24c9, 0x24e3); (0x24ca, 0x24e4); (0x24cb, 0x24e5); (0x24cc, 0x24e6); 1631 (0x24cd, 0x24e7); (0x24ce, 0x24e8); (0x24cf, 0x24e9)] 1632 1633 let _ = List.iter (fun (c, c') -> add lower_map c [c']) missing_lower 1634 1635 (****) 1636 1637 let normalize_map = compose !lower_map !decompose_map 1638 1639 let conv c = 1640 if c >= hangul_sbase && c < hangul_sbase + hangul_scount then 1641 String.concat "" (List.map encode_utf8 (convert_hangul c)) 1642 else 1643 try 1644 String.concat "" 1645 (List.map encode_utf8 (IntMap.find c normalize_map)) 1646 with Not_found -> 1647 encode_utf8 c 1648 1649 let _ = 1650 IntMap.iter (fun c l -> 1651 (* Format.printf "%a -> %a@." print_uni c print_chars l;*) 1652 let s1 = encode_utf8 c in 1653 let s2 = conv c in 1654 assert (String.length s2 <= 3 * String.length s1)) 1655 normalize_map 1656 1657 (****) 1658 1659 (**** Samba tables *) 1660 1661 let read_file nm l = 1662 let ch = open_in ("codepages/" ^ nm) in 1663 let s = Bytes.create l in 1664 really_input ch s 0 l; 1665 s 1666 1667 let load nm = 1668 let tbl = read_file nm (2 * 65536) in 1669 fun c -> Char.code tbl.[c * 2] + 256 * Char.code tbl.[c * 2 + 1] 1670 1671 let to_upper = load "upcase.dat" 1672 let to_lower = load "lowcase.dat" 1673 1674 let toupper_ascii_fast_table = 1675 [| 0x0; 0x1; 0x2; 0x3; 0x4; 0x5; 0x6; 0x7; 0x8; 0x9; 0xa; 0xb; 0xc; 1676 0xd; 0xe; 0xf; 0x10; 0x11; 0x12; 0x13; 0x14; 0x15; 0x16; 0x17; 1677 0x18; 0x19; 0x1a; 0x1b; 0x1c; 0x1d; 0x1e; 0x1f; 0x20; 0x21; 0x22; 1678 0x23; 0x24; 0x25; 0x26; 0x27; 0x28; 0x29; 0x2a; 0x2b; 0x2c; 0x2d; 1679 0x2e; 0x2f; 0x30; 0x31; 0x32; 0x33; 0x34; 0x35; 0x36; 0x37; 0x38; 1680 0x39; 0x3a; 0x3b; 0x3c; 0x3d; 0x3e; 0x3f; 0x40; 0x41; 0x42; 0x43; 1681 0x44; 0x45; 0x46; 0x47; 0x48; 0x49; 0x4a; 0x4b; 0x4c; 0x4d; 0x4e; 1682 0x4f; 0x50; 0x51; 0x52; 0x53; 0x54; 0x55; 0x56; 0x57; 0x58; 0x59; 1683 0x5a; 0x5b; 0x5c; 0x5d; 0x5e; 0x5f; 0x60; 0x41; 0x42; 0x43; 0x44; 1684 0x45; 0x46; 0x47; 0x48; 0x49; 0x4a; 0x4b; 0x4c; 0x4d; 0x4e; 0x4f; 1685 0x50; 0x51; 0x52; 0x53; 0x54; 0x55; 0x56; 0x57; 0x58; 0x59; 0x5a; 1686 0x7b; 0x7c; 0x7d; 0x7e; 0x7f |] 1687 1688 let _ = 1689 for i = 0 to 127 do 1690 assert (toupper_ascii_fast_table.(i) = to_upper i) 1691 done 1692 1693 (* 1694 let _ = 1695 Format.printf "================@."; 1696 for c = 0 to 65535 do 1697 let c' = to_upper c in 1698 let l = convert normalize_map c in 1699 let l' = convert normalize_map c' in 1700 if c <> c' && l <> l' then 1701 Format.printf "%a (%a) -> %a (%a)@." 1702 print_uni c print_chars l print_uni c' print_chars l' 1703 done 1704 *) 1705 1706 (* 1707 let _ = 1708 Format.printf "================@."; 1709 for c = 0 to 65535 do 1710 begin match convert normalize_map c with 1711 [c'] -> 1712 let d = to_upper c in 1713 let d' = to_upper c' in 1714 if c <> c' && d <> d' then 1715 Format.printf "%a (%a) -> %a (%a)@." 1716 print_uni c print_uni d print_uni c' print_uni d' 1717 | _ -> 1718 () 1719 end 1720 done 1721 *) 1722 1723 (****) 1724 1725 type action = Copy | Replace of int list | Scan of int * int * action array 1726 1727 let make_level () = Array.make 256 Copy 1728 1729 let table = make_level () 1730 1731 let get tbl c = tbl.(c) 1732 let rec set tbl c v = tbl.(c) <- v 1733 1734 let rec insert tbl c l = 1735 match c with 1736 [] -> assert false 1737 | [c] -> 1738 if get tbl c = Copy then set tbl c (Replace l) 1739 (*XXXXXXXXXXXXXX 1740 assert (get tbl c = Copy); set tbl c (Replace l) 1741 *) 1742 | c :: r -> 1743 let a = 1744 match get tbl c with 1745 Copy -> 1746 let a = make_level () in set tbl c (Scan (0, 256, a)); a 1747 | Scan (_, _, a) -> 1748 a 1749 | _ -> 1750 let a = make_level () in set tbl c (Scan (0, 256, a)); a 1751 (*XXXXXXXXXX assert false*) 1752 in 1753 insert a r l 1754 1755 let rec list_of_string_rec s i l = 1756 if i = l then [] else Char.code s.[i] :: list_of_string_rec s (i + 1) l 1757 1758 let list_of_string s = list_of_string_rec s 0 (String.length s) 1759 1760 let _ = 1761 IntMap.iter 1762 (fun c l -> let s = encode_utf8 c in insert table (list_of_string s) l) 1763 normalize_map 1764 1765 let rec print_seq ch s = 1766 match s with 1767 [] -> () 1768 | [c] -> Format.fprintf ch "%2x" c 1769 | c :: r -> Format.fprintf ch "%2x,%a" c print_seq r 1770 1771 (* 1772 let sz = ref 0 1773 1774 let rec compress loc tbl = 1775 for i = 0 to Array.length tbl - 1 do 1776 match tbl.(i) with 1777 Copy -> () 1778 | Replace _ -> () 1779 | Scan (j, k, a) -> 1780 let loc = i :: loc in 1781 compress loc a; 1782 let l = k - j in 1783 let j' = ref 0 in 1784 while !j' < l && a.(!j') = Copy do incr j' done; 1785 let k' = ref (l - 1) in 1786 while !k' >= 0 && a.(!k') = Copy do decr k' done; 1787 incr k'; 1788 assert (!j' < !k'); 1789 let l' = !k' - !j' in 1790 sz := !sz + l' + 5; 1791 let a = Array.sub a !j' l' in 1792 Format.eprintf "%a: %2x %d@." print_seq (List.rev loc) (j + !j') l'; 1793 tbl.(i) <- Scan (j + !j', j + !k', a) 1794 done 1795 1796 let _ = compress [] table 1797 1798 let _ = Format.eprintf "size: %d@." !sz 1799 1800 1801 let table = make_level () 1802 1803 let _ = 1804 IntMap.iter 1805 (fun c l -> 1806 let s = 1807 List.flatten 1808 (List.map (fun c -> list_of_string (encode_utf8 c)) l) 1809 in 1810 if s <> [] then insert table s [c]) 1811 normalize_map 1812 1813 let _ = sz := 0; compress [] table; Format.eprintf "size: %d@." !sz 1814 *) 1815 1816 (****) 1817 1818 type 'a t = { l : int; tbl : 'a option array array } 1819 1820 let dummy = [||] 1821 let make l = {l = l; tbl = Array.make (65536 / l) dummy} 1822 let set tbl n v = 1823 let i = n / tbl.l in 1824 let j = n mod tbl.l in 1825 if tbl.tbl.(i) == dummy then 1826 tbl.tbl.(i) <- Array.make tbl.l None; 1827 tbl.tbl.(i).(j) <- Some v 1828 let size tbl = 1829 let n = ref 0 in 1830 let l = Array.length tbl.tbl in 1831 for i = 0 to l - 1 do if tbl.tbl.(i) != dummy then incr n done; 1832 let n = !n in 1833 (* 1834 if n >= 255 then 1835 l * 2 + (n + 2) * tbl.l * 2 1836 else 1837 l + (n + 2) * tbl.l * 2 1838 *) 1839 (0x309a + tbl.l - 1) / tbl.l + (n + 1) * tbl.l 1840 (* 1841 l + (n + 1) * tbl.l 1842 *) 1843 1844 let build m l = 1845 let tbl = make (1 lsl l) in IntMap.iter (fun c l -> if c > 127 then set tbl c l) m; tbl 1846 1847 (* 1848 let _ = 1849 for l = 1 to 15 do 1850 Format.eprintf "%d %d@." l (size (build normalize_map l)) 1851 done 1852 1853 let _ = 1854 for l = 1 to 15 do 1855 Format.eprintf "%d %d@." l (size (build !compose_map l)) 1856 done 1857 *) 1858 1859 let print_tbl nm l ch map = 1860 let tbl = build map l in 1861 (* ASCII *) 1862 Format.fprintf ch "@[<2>let %s_%s =@ @[<1>\"" nm "ascii"; 1863 for c = 0 to 127 do 1864 let c' = 1865 try 1866 match IntMap.find c map with [c] -> c | _ -> assert false 1867 with Not_found -> 1868 c 1869 in 1870 Format.fprintf ch "%s" (String.escaped (String.make 1 (Char.chr c'))) 1871 done; 1872 Format.fprintf ch "\"@]@]@."; 1873 (* Replacement *) 1874 let l = ref [] in 1875 let p = ref 0 in 1876 Format.fprintf ch "@[<2>let %s_%s =@ @[<1>\"" nm "repl"; 1877 for i = 0 to Array.length tbl.tbl - 1 do 1878 let a = tbl.tbl.(i) in 1879 if a != dummy then begin 1880 for j = 0 to tbl.l - 1 do 1881 match a.(j) with 1882 None -> 1883 () 1884 | Some v -> 1885 if not (List.mem_assoc v !l) then begin 1886 l := (v, !p) :: !l; 1887 let s = String.concat "" (List.map encode_utf8 v) in 1888 Format.fprintf ch "\\%03d%s" 1889 (String.length s) (if s = "\\" then "\\\\" else 1890 if s = "\"" then "\\\"" else s); 1891 p := !p + String.length s + 1 1892 end 1893 done 1894 end 1895 done; 1896 Format.fprintf ch "\"@]@]@."; 1897 (* Primary level *) 1898 Format.fprintf ch "@[<2>let %s_%s =@ @[<1>\"" nm "prim"; 1899 let n = ref 1 in 1900 for i = 0 to Array.length tbl.tbl - 1 do 1901 let j = 1902 if i * tbl.l < hangul_sbase + hangul_scount && 1903 (i + 1) * tbl.l - 1 >= hangul_sbase then begin 1904 assert (tbl.tbl.(i) == dummy); 1 1905 end else if tbl.tbl.(i) == dummy then 0 else begin incr n; !n end in 1906 Format.fprintf ch "\\%03d" j 1907 done; 1908 Format.fprintf ch "\"@]@]@."; 1909 (* Secondary level *) 1910 Format.fprintf ch "@[<2>let %s_%s =@ @[<1>\"" nm "second_high"; 1911 for i = 0 to tbl.l - 1 do (* Empty table *) 1912 Format.fprintf ch "\\%03d" 0 1913 done; 1914 for i = 0 to tbl.l - 1 do (* Hangul table *) 1915 Format.fprintf ch "\\%03d" 1 1916 done; 1917 for i = 0 to Array.length tbl.tbl - 1 do 1918 let a = tbl.tbl.(i) in 1919 if a != dummy then begin 1920 for j = 0 to tbl.l - 1 do 1921 match a.(j) with 1922 None -> 1923 Format.fprintf ch "\\%03d" 0 1924 | Some v -> 1925 let n = List.assoc v !l in 1926 (* 0 is unchanged; 1 is Hangul *) 1927 Format.fprintf ch "\\%03d" (n / 256 + 2) 1928 done 1929 end 1930 done; 1931 Format.fprintf ch "\"@]@]@."; 1932 Format.fprintf ch "@[<2>let %s_%s =@ @[<1>\"" nm "second_low"; 1933 for i = 0 to 2 * tbl.l - 1 do (* Two unused entries *) 1934 Format.fprintf ch "\\%03d" 0 1935 done; 1936 for i = 0 to Array.length tbl.tbl - 1 do 1937 let a = tbl.tbl.(i) in 1938 if a != dummy then begin 1939 for j = 0 to tbl.l - 1 do 1940 match a.(j) with 1941 None -> 1942 Format.fprintf ch "\\%03d" 0 1943 | Some v -> 1944 let n = List.assoc v !l in 1945 Format.fprintf ch "\\%03d" (n mod 256) 1946 done 1947 end 1948 done; 1949 Format.fprintf ch "\"@]@]@." 1950 1951 let print_compose prim snd ch tbl = 1952 (* Primary level *) 1953 Format.fprintf ch "@[<2>let %s =@ @[<1>\"" prim; 1954 let n = ref 1 in 1955 for i = 0 to Array.length tbl.tbl - 1 do 1956 let j = 1957 (*XXX Hangul*) 1958 (* 1959 if i * tbl.l < hangul_sbase + hangul_scount && 1960 (i + 1) * tbl.l - 1 >= hangul_sbase then begin 1961 assert (tbl.tbl.(i) == dummy); 1 1962 end else*) if tbl.tbl.(i) == dummy then 0 else begin incr n; !n end in 1963 Format.fprintf ch "\\%03d" j 1964 done; 1965 Format.fprintf ch "\"@]@]@."; 1966 (* Secondary level *) 1967 let n = ref 1 in 1968 Format.fprintf ch "@[<2>let %s =@ @[<1>\"" snd; 1969 for i = 0 to tbl.l - 1 do (* Empty table *) 1970 Format.fprintf ch "\\%03d" 0 1971 done; 1972 for i = 0 to tbl.l - 1 do (* Hangul table *) 1973 Format.fprintf ch "\\%03d" 1 1974 done; 1975 for i = 0 to Array.length tbl.tbl - 1 do 1976 let a = tbl.tbl.(i) in 1977 if a != dummy then begin 1978 for j = 0 to tbl.l - 1 do 1979 match a.(j) with 1980 None -> 1981 Format.fprintf ch "\\%03d" 0 1982 | Some v -> 1983 incr n; 1984 Format.fprintf ch "\\%03d" !n 1985 done 1986 end 1987 done; 1988 Format.fprintf ch "\"@]@]@." 1989 1990 let _ = 1991 let o = open_out "unicode_tables.ml" in 1992 let ch = Format.formatter_of_out_channel o in 1993 Format.fprintf ch "(*-*-coding: utf-8;-*-*)@."; 1994 Format.fprintf ch "%a" (print_tbl "norm" 6) normalize_map; 1995 Format.fprintf ch "%a" (print_tbl "decomp" 6) !decompose_map; 1996 (* 1997 Format.fprintf ch "%a" (print_compose "comp_prim" "comp_snd") 1998 (build !compose_map 6); 1999 *) 2000 close_out o 2001 2002 (* 2003 let k = Char.code first.(i)) lsl 6 + j in 2004 let fst = Char.code second.(k) in 2005 if fst = 0 then ... else 2006 let snd = Char.code second'.(k) in 2007 let i = fst lsl 8 + snd - 256 in 2008 let s = tbl.(i) in 2009 ... 2010 *) 2011 2012 (* 2013 let next s = 2014 let c = Ibuffer.look_ahead s in 2015 if c = -1 then begin 2016 0xffff (* EOF *) 2017 end else if c < 0x80 then begin 2018 c 2019 end else if c < 0xE0 then begin 2020 (* 80 - 7FF *) 2021 if c < 0xC2 then raise Failed; 2022 if not (Ibuffer.advance s 1) then raise Failed; 2023 let c1 = Ibuffer.read s 1 in 2024 if c1 land 192 <> 128 then raise Failed; 2025 (c - 0xC0) lsl 6 + c1 - 0x80 2026 end else if c < 0xF0 then begin 2027 (* 800 - FFFF *) 2028 if not (Ibuffer.advance s 2) then raise Failed; 2029 let c1 = Ibuffer.read s 1 in 2030 if c1 land 192 <> 128 then raise Failed; 2031 if c = 0xE0 && c1 < 0xA0 then raise Failed; 2032 let c2 = Ibuffer.read s 2 in 2033 if c2 land 192 <> 128 then raise Failed; 2034 let res = (c - 0xE0) lsl 12 + (c1 - 0x80) lsl 6 + c2 - 0x80 in 2035 if res = 0xFFFF then raise Failed; 2036 res end else if c < 0xF5 then begin 2037 (* 10000 - 10FFFF *) 2038 if not (Ibuffer.advance s 3) then raise Failed; 2039 let c1 = Ibuffer.read s 1 in 2040 if c1 land 192 <> 128 then raise Failed; 2041 if c = 0xF0 && c1 < 0x90 then raise Failed; 2042 if c = 0xF4 && c1 >= 0x90 then raise Failed; 2043 let c2 = Ibuffer.read s 2 in 2044 if c2 land 192 <> 128 then raise Failed; 2045 let c3 = Ibuffer.read s 3 in 2046 if c3 land 192 <> 128 then raise Failed; 2047 (c - 0xF0) lsl 18 + (c1 - 0x80) lsl 12 + (c2 - 0x80) lsl 6 + c3 - 0x80 2048 end else 2049 raise Failed 2050 *)