|
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
|
2 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 #include <stdint.h> |
|
7 |
|
8 class nsIAtom; |
|
9 |
|
10 // The following constants define unicode subranges |
|
11 // values below kRangeNum must be continuous so that we can map to |
|
12 // lang group directly. |
|
13 // all ranges we care about should be defined under 32, that allows |
|
14 // us to store range using bits of a uint32_t |
|
15 |
|
16 // frequently used range definitions |
|
17 const uint8_t kRangeCyrillic = 0; |
|
18 const uint8_t kRangeGreek = 1; |
|
19 const uint8_t kRangeTurkish = 2; |
|
20 const uint8_t kRangeHebrew = 3; |
|
21 const uint8_t kRangeArabic = 4; |
|
22 const uint8_t kRangeBaltic = 5; |
|
23 const uint8_t kRangeThai = 6; |
|
24 const uint8_t kRangeKorean = 7; |
|
25 const uint8_t kRangeJapanese = 8; |
|
26 const uint8_t kRangeSChinese = 9; |
|
27 const uint8_t kRangeTChinese = 10; |
|
28 const uint8_t kRangeDevanagari = 11; |
|
29 const uint8_t kRangeTamil = 12; |
|
30 const uint8_t kRangeArmenian = 13; |
|
31 const uint8_t kRangeBengali = 14; |
|
32 const uint8_t kRangeCanadian = 15; |
|
33 const uint8_t kRangeEthiopic = 16; |
|
34 const uint8_t kRangeGeorgian = 17; |
|
35 const uint8_t kRangeGujarati = 18; |
|
36 const uint8_t kRangeGurmukhi = 19; |
|
37 const uint8_t kRangeKhmer = 20; |
|
38 const uint8_t kRangeMalayalam = 21; |
|
39 const uint8_t kRangeOriya = 22; |
|
40 const uint8_t kRangeTelugu = 23; |
|
41 const uint8_t kRangeKannada = 24; |
|
42 const uint8_t kRangeSinhala = 25; |
|
43 const uint8_t kRangeTibetan = 26; |
|
44 |
|
45 const uint8_t kRangeSpecificItemNum = 27; |
|
46 |
|
47 //range/rangeSet grow to this place 27-29 |
|
48 |
|
49 const uint8_t kRangeSetStart = 30; // range set definition starts from here |
|
50 const uint8_t kRangeSetLatin = 30; |
|
51 const uint8_t kRangeSetCJK = 31; |
|
52 const uint8_t kRangeSetEnd = 31; // range set definition ends here, this |
|
53 // and smaller ranges are used as bit |
|
54 // mask, don't increase this value. |
|
55 |
|
56 // less frequently used range definition |
|
57 const uint8_t kRangeSurrogate = 32; |
|
58 const uint8_t kRangePrivate = 33; |
|
59 const uint8_t kRangeMisc = 34; |
|
60 const uint8_t kRangeUnassigned = 35; |
|
61 const uint8_t kRangeSyriac = 36; |
|
62 const uint8_t kRangeThaana = 37; |
|
63 const uint8_t kRangeLao = 38; |
|
64 const uint8_t kRangeMyanmar = 39; |
|
65 const uint8_t kRangeCherokee = 40; |
|
66 const uint8_t kRangeOghamRunic = 41; |
|
67 const uint8_t kRangeMongolian = 42; |
|
68 const uint8_t kRangeMathOperators = 43; |
|
69 const uint8_t kRangeMiscTechnical = 44; |
|
70 const uint8_t kRangeControlOpticalEnclose = 45; |
|
71 const uint8_t kRangeBoxBlockGeometrics = 46; |
|
72 const uint8_t kRangeMiscSymbols = 47; |
|
73 const uint8_t kRangeDingbats = 48; |
|
74 const uint8_t kRangeBraillePattern = 49; |
|
75 const uint8_t kRangeYi = 50; |
|
76 const uint8_t kRangeCombiningDiacriticalMarks = 51; |
|
77 const uint8_t kRangeSpecials = 52; |
|
78 |
|
79 // aggregate ranges for non-BMP codepoints (u+2xxxx are all CJK) |
|
80 const uint8_t kRangeSMP = 53; // u+1xxxx |
|
81 const uint8_t kRangeHigherPlanes = 54; // u+3xxxx and above |
|
82 |
|
83 const uint8_t kRangeTableBase = 128; //values over 127 are reserved for internal use only |
|
84 const uint8_t kRangeTertiaryTable = 145; // leave room for 16 subtable |
|
85 // indices (kRangeTableBase + 1 .. |
|
86 // kRangeTableBase + 16) |
|
87 |
|
88 |
|
89 |
|
90 uint32_t FindCharUnicodeRange(uint32_t ch); |
|
91 nsIAtom* LangGroupFromUnicodeRange(uint8_t unicodeRange); |