• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2010, The Android Open Source Project
3  * Copyright 2010, Google Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *  * Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  *  * Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26 
27 #include "harfbuzz-external.h"
28 
29 #include   <unicode/uchar.h>
30 #include   <unicode/utypes.h>
31 
32 /*
33    We use ICU APIs to get the character's Unicode property.
34    This module replaces the harfbuzz-unicode-tables.c which is
35    using static Unicode tables.
36 */
37 
38 static int
hb_category_for_char(HB_UChar32 ch)39 hb_category_for_char(HB_UChar32 ch) {
40   switch (u_charType(ch)) {
41     case U_CONTROL_CHAR:
42       return HB_Other_Control;
43     case U_FORMAT_CHAR:
44       return HB_Other_Format;
45     case U_UNASSIGNED:
46       return HB_Other_NotAssigned;
47     case U_PRIVATE_USE_CHAR:
48       return HB_Other_PrivateUse;
49     case U_SURROGATE:
50       return HB_Other_Surrogate;
51     case U_LOWERCASE_LETTER:
52       return HB_Letter_Lowercase;
53     case U_MODIFIER_LETTER:
54       return HB_Letter_Modifier;
55     case U_OTHER_LETTER:
56       return HB_Letter_Other;
57     case U_TITLECASE_LETTER:
58       return HB_Letter_Titlecase;
59     case U_UPPERCASE_LETTER:
60       return HB_Letter_Uppercase;
61     case U_COMBINING_SPACING_MARK:
62       return HB_Mark_SpacingCombining;
63     case U_ENCLOSING_MARK:
64       return HB_Mark_Enclosing;
65     case U_NON_SPACING_MARK:
66       return HB_Mark_NonSpacing;
67     case U_DECIMAL_DIGIT_NUMBER :
68       return HB_Number_DecimalDigit;
69     case U_LETTER_NUMBER:
70       return HB_Number_Letter;
71     case U_OTHER_NUMBER:
72       return HB_Number_Other;
73     case U_CONNECTOR_PUNCTUATION:
74       return HB_Punctuation_Connector;
75     case U_DASH_PUNCTUATION:
76       return HB_Punctuation_Dash;
77     case U_END_PUNCTUATION:
78       return HB_Punctuation_Close;
79     case U_FINAL_PUNCTUATION:
80       return HB_Punctuation_FinalQuote;
81     case U_INITIAL_PUNCTUATION:
82       return HB_Punctuation_InitialQuote;
83     case U_OTHER_PUNCTUATION:
84       return HB_Punctuation_Other;
85     case U_START_PUNCTUATION:
86       return HB_Punctuation_Open;
87     case U_CURRENCY_SYMBOL:
88       return HB_Symbol_Currency;
89     case U_MODIFIER_SYMBOL:
90       return HB_Symbol_Modifier;
91     case U_MATH_SYMBOL:
92       return HB_Symbol_Math;
93     case U_OTHER_SYMBOL:
94       return HB_Symbol_Other;
95     case U_LINE_SEPARATOR:
96       return HB_Separator_Line;
97     case U_PARAGRAPH_SEPARATOR:
98       return HB_Separator_Paragraph;
99     case U_SPACE_SEPARATOR:
100       return HB_Separator_Space;
101     default:
102       return HB_Symbol_Other;
103   }
104 }
105 
106 HB_LineBreakClass
HB_GetLineBreakClass(HB_UChar32 ch)107 HB_GetLineBreakClass(HB_UChar32 ch) {
108   switch ((ULineBreak)u_getIntPropertyValue(ch, UCHAR_LINE_BREAK)) {
109     case U_LB_MANDATORY_BREAK:
110       return HB_LineBreak_BK;
111     case U_LB_CARRIAGE_RETURN:
112       return HB_LineBreak_CR;
113     case U_LB_LINE_FEED:
114       return HB_LineBreak_LF;
115     case U_LB_COMBINING_MARK:
116       return HB_LineBreak_CM;
117     case U_LB_SURROGATE:
118       return HB_LineBreak_SG;
119     case U_LB_ZWSPACE:
120       return HB_LineBreak_ZW;
121     case U_LB_INSEPARABLE:
122       return HB_LineBreak_IN;
123     case U_LB_GLUE:
124       return HB_LineBreak_GL;
125     case U_LB_CONTINGENT_BREAK:
126       return HB_LineBreak_AL;
127     case U_LB_SPACE:
128       return HB_LineBreak_SP;
129     case U_LB_BREAK_AFTER:
130       return HB_LineBreak_BA;
131     case U_LB_BREAK_BEFORE:
132       return HB_LineBreak_BB;
133     case U_LB_BREAK_BOTH:
134       return HB_LineBreak_B2;
135     case U_LB_HYPHEN:
136       return HB_LineBreak_HY;
137     case U_LB_NONSTARTER:
138       return HB_LineBreak_NS;
139     case U_LB_OPEN_PUNCTUATION:
140       return HB_LineBreak_OP;
141     case U_LB_CLOSE_PUNCTUATION:
142       return HB_LineBreak_CL;
143     case U_LB_QUOTATION:
144       return HB_LineBreak_QU;
145     case U_LB_EXCLAMATION:
146       return HB_LineBreak_EX;
147     case U_LB_IDEOGRAPHIC:
148       return HB_LineBreak_ID;
149     case U_LB_NUMERIC:
150       return HB_LineBreak_NU;
151     case U_LB_INFIX_NUMERIC:
152       return HB_LineBreak_IS;
153     case U_LB_BREAK_SYMBOLS:
154       return HB_LineBreak_SY;
155     case U_LB_ALPHABETIC:
156       return HB_LineBreak_AL;
157     case U_LB_PREFIX_NUMERIC:
158       return HB_LineBreak_PR;
159     case U_LB_POSTFIX_NUMERIC:
160       return HB_LineBreak_PO;
161     case U_LB_COMPLEX_CONTEXT:
162       return HB_LineBreak_SA;
163     case U_LB_AMBIGUOUS:
164       return HB_LineBreak_AL;
165     case U_LB_UNKNOWN:
166       return HB_LineBreak_AL;
167     case U_LB_NEXT_LINE:
168       return HB_LineBreak_AL;
169     case U_LB_WORD_JOINER:
170       return HB_LineBreak_WJ;
171     case U_LB_JL:
172       return HB_LineBreak_JL;
173     case U_LB_JV:
174       return HB_LineBreak_JV;
175     case U_LB_JT:
176       return HB_LineBreak_JT;
177     case U_LB_H2:
178       return HB_LineBreak_H2;
179     case U_LB_H3:
180       return HB_LineBreak_H3;
181     default:
182       return HB_LineBreak_AL;
183   }
184 }
185 
186 int
HB_GetUnicodeCharCombiningClass(HB_UChar32 ch)187 HB_GetUnicodeCharCombiningClass(HB_UChar32 ch) {
188   return u_getCombiningClass(ch);
189 }
190 
191 void
HB_GetUnicodeCharProperties(HB_UChar32 ch,HB_CharCategory * category,int * combiningClass)192 HB_GetUnicodeCharProperties(HB_UChar32 ch,
193                             HB_CharCategory *category,
194                             int *combiningClass) {
195   *category = hb_category_for_char(ch);
196   *combiningClass = u_getCombiningClass(ch);
197 }
198 
199 HB_CharCategory
HB_GetUnicodeCharCategory(HB_UChar32 ch)200 HB_GetUnicodeCharCategory(HB_UChar32 ch) {
201   return hb_category_for_char(ch);
202 }
203