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