1*2d1272b8SAndroid Build Coastguard Worker /*
2*2d1272b8SAndroid Build Coastguard Worker * Copyright © 2010,2011,2012 Google, Inc.
3*2d1272b8SAndroid Build Coastguard Worker *
4*2d1272b8SAndroid Build Coastguard Worker * This is part of HarfBuzz, a text shaping library.
5*2d1272b8SAndroid Build Coastguard Worker *
6*2d1272b8SAndroid Build Coastguard Worker * Permission is hereby granted, without written agreement and without
7*2d1272b8SAndroid Build Coastguard Worker * license or royalty fees, to use, copy, modify, and distribute this
8*2d1272b8SAndroid Build Coastguard Worker * software and its documentation for any purpose, provided that the
9*2d1272b8SAndroid Build Coastguard Worker * above copyright notice and the following two paragraphs appear in
10*2d1272b8SAndroid Build Coastguard Worker * all copies of this software.
11*2d1272b8SAndroid Build Coastguard Worker *
12*2d1272b8SAndroid Build Coastguard Worker * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13*2d1272b8SAndroid Build Coastguard Worker * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14*2d1272b8SAndroid Build Coastguard Worker * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15*2d1272b8SAndroid Build Coastguard Worker * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16*2d1272b8SAndroid Build Coastguard Worker * DAMAGE.
17*2d1272b8SAndroid Build Coastguard Worker *
18*2d1272b8SAndroid Build Coastguard Worker * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19*2d1272b8SAndroid Build Coastguard Worker * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20*2d1272b8SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
21*2d1272b8SAndroid Build Coastguard Worker * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22*2d1272b8SAndroid Build Coastguard Worker * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23*2d1272b8SAndroid Build Coastguard Worker *
24*2d1272b8SAndroid Build Coastguard Worker * Google Author(s): Behdad Esfahbod
25*2d1272b8SAndroid Build Coastguard Worker */
26*2d1272b8SAndroid Build Coastguard Worker
27*2d1272b8SAndroid Build Coastguard Worker #ifndef HB_OT_SHAPER_HH
28*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_SHAPER_HH
29*2d1272b8SAndroid Build Coastguard Worker
30*2d1272b8SAndroid Build Coastguard Worker #include "hb.hh"
31*2d1272b8SAndroid Build Coastguard Worker
32*2d1272b8SAndroid Build Coastguard Worker #include "hb-ot-layout.hh"
33*2d1272b8SAndroid Build Coastguard Worker #include "hb-ot-shape.hh"
34*2d1272b8SAndroid Build Coastguard Worker #include "hb-ot-shape-normalize.hh"
35*2d1272b8SAndroid Build Coastguard Worker
36*2d1272b8SAndroid Build Coastguard Worker
37*2d1272b8SAndroid Build Coastguard Worker /* buffer var allocations, used by all OT shapers */
38*2d1272b8SAndroid Build Coastguard Worker #define ot_shaper_var_u8_category() var2.u8[2]
39*2d1272b8SAndroid Build Coastguard Worker #define ot_shaper_var_u8_auxiliary() var2.u8[3]
40*2d1272b8SAndroid Build Coastguard Worker
41*2d1272b8SAndroid Build Coastguard Worker
42*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_SHAPE_MAX_COMBINING_MARKS 32
43*2d1272b8SAndroid Build Coastguard Worker
44*2d1272b8SAndroid Build Coastguard Worker enum hb_ot_shape_zero_width_marks_type_t {
45*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
46*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
47*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE
48*2d1272b8SAndroid Build Coastguard Worker };
49*2d1272b8SAndroid Build Coastguard Worker
50*2d1272b8SAndroid Build Coastguard Worker
51*2d1272b8SAndroid Build Coastguard Worker /* Master OT shaper list */
52*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_SHAPERS_IMPLEMENT_SHAPERS \
53*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPER_IMPLEMENT (arabic) \
54*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPER_IMPLEMENT (default) \
55*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPER_IMPLEMENT (dumber) \
56*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPER_IMPLEMENT (hangul) \
57*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPER_IMPLEMENT (hebrew) \
58*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPER_IMPLEMENT (indic) \
59*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPER_IMPLEMENT (khmer) \
60*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPER_IMPLEMENT (myanmar) \
61*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPER_IMPLEMENT (myanmar_zawgyi) \
62*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPER_IMPLEMENT (thai) \
63*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPER_IMPLEMENT (use) \
64*2d1272b8SAndroid Build Coastguard Worker /* ^--- Add new shapers here; keep sorted. */
65*2d1272b8SAndroid Build Coastguard Worker
66*2d1272b8SAndroid Build Coastguard Worker
67*2d1272b8SAndroid Build Coastguard Worker struct hb_ot_shaper_t
68*2d1272b8SAndroid Build Coastguard Worker {
69*2d1272b8SAndroid Build Coastguard Worker /* collect_features()
70*2d1272b8SAndroid Build Coastguard Worker * Called during shape_plan().
71*2d1272b8SAndroid Build Coastguard Worker * Shapers should use plan->map to add their features and callbacks.
72*2d1272b8SAndroid Build Coastguard Worker * May be NULL.
73*2d1272b8SAndroid Build Coastguard Worker */
74*2d1272b8SAndroid Build Coastguard Worker void (*collect_features) (hb_ot_shape_planner_t *plan);
75*2d1272b8SAndroid Build Coastguard Worker
76*2d1272b8SAndroid Build Coastguard Worker /* override_features()
77*2d1272b8SAndroid Build Coastguard Worker * Called during shape_plan().
78*2d1272b8SAndroid Build Coastguard Worker * Shapers should use plan->map to override features and add callbacks after
79*2d1272b8SAndroid Build Coastguard Worker * common features are added.
80*2d1272b8SAndroid Build Coastguard Worker * May be NULL.
81*2d1272b8SAndroid Build Coastguard Worker */
82*2d1272b8SAndroid Build Coastguard Worker void (*override_features) (hb_ot_shape_planner_t *plan);
83*2d1272b8SAndroid Build Coastguard Worker
84*2d1272b8SAndroid Build Coastguard Worker
85*2d1272b8SAndroid Build Coastguard Worker /* data_create()
86*2d1272b8SAndroid Build Coastguard Worker * Called at the end of shape_plan().
87*2d1272b8SAndroid Build Coastguard Worker * Whatever shapers return will be accessible through plan->data later.
88*2d1272b8SAndroid Build Coastguard Worker * If nullptr is returned, means a plan failure.
89*2d1272b8SAndroid Build Coastguard Worker */
90*2d1272b8SAndroid Build Coastguard Worker void *(*data_create) (const hb_ot_shape_plan_t *plan);
91*2d1272b8SAndroid Build Coastguard Worker
92*2d1272b8SAndroid Build Coastguard Worker /* data_destroy()
93*2d1272b8SAndroid Build Coastguard Worker * Called when the shape_plan is being destroyed.
94*2d1272b8SAndroid Build Coastguard Worker * plan->data is passed here for destruction.
95*2d1272b8SAndroid Build Coastguard Worker * If nullptr is returned, means a plan failure.
96*2d1272b8SAndroid Build Coastguard Worker * May be NULL.
97*2d1272b8SAndroid Build Coastguard Worker */
98*2d1272b8SAndroid Build Coastguard Worker void (*data_destroy) (void *data);
99*2d1272b8SAndroid Build Coastguard Worker
100*2d1272b8SAndroid Build Coastguard Worker
101*2d1272b8SAndroid Build Coastguard Worker /* preprocess_text()
102*2d1272b8SAndroid Build Coastguard Worker * Called during shape().
103*2d1272b8SAndroid Build Coastguard Worker * Shapers can use to modify text before shaping starts.
104*2d1272b8SAndroid Build Coastguard Worker * May be NULL.
105*2d1272b8SAndroid Build Coastguard Worker */
106*2d1272b8SAndroid Build Coastguard Worker void (*preprocess_text) (const hb_ot_shape_plan_t *plan,
107*2d1272b8SAndroid Build Coastguard Worker hb_buffer_t *buffer,
108*2d1272b8SAndroid Build Coastguard Worker hb_font_t *font);
109*2d1272b8SAndroid Build Coastguard Worker
110*2d1272b8SAndroid Build Coastguard Worker /* postprocess_glyphs()
111*2d1272b8SAndroid Build Coastguard Worker * Called during shape().
112*2d1272b8SAndroid Build Coastguard Worker * Shapers can use to modify glyphs after shaping ends.
113*2d1272b8SAndroid Build Coastguard Worker * May be NULL.
114*2d1272b8SAndroid Build Coastguard Worker */
115*2d1272b8SAndroid Build Coastguard Worker void (*postprocess_glyphs) (const hb_ot_shape_plan_t *plan,
116*2d1272b8SAndroid Build Coastguard Worker hb_buffer_t *buffer,
117*2d1272b8SAndroid Build Coastguard Worker hb_font_t *font);
118*2d1272b8SAndroid Build Coastguard Worker
119*2d1272b8SAndroid Build Coastguard Worker
120*2d1272b8SAndroid Build Coastguard Worker /* decompose()
121*2d1272b8SAndroid Build Coastguard Worker * Called during shape()'s normalization.
122*2d1272b8SAndroid Build Coastguard Worker * May be NULL.
123*2d1272b8SAndroid Build Coastguard Worker */
124*2d1272b8SAndroid Build Coastguard Worker bool (*decompose) (const hb_ot_shape_normalize_context_t *c,
125*2d1272b8SAndroid Build Coastguard Worker hb_codepoint_t ab,
126*2d1272b8SAndroid Build Coastguard Worker hb_codepoint_t *a,
127*2d1272b8SAndroid Build Coastguard Worker hb_codepoint_t *b);
128*2d1272b8SAndroid Build Coastguard Worker
129*2d1272b8SAndroid Build Coastguard Worker /* compose()
130*2d1272b8SAndroid Build Coastguard Worker * Called during shape()'s normalization.
131*2d1272b8SAndroid Build Coastguard Worker * May be NULL.
132*2d1272b8SAndroid Build Coastguard Worker */
133*2d1272b8SAndroid Build Coastguard Worker bool (*compose) (const hb_ot_shape_normalize_context_t *c,
134*2d1272b8SAndroid Build Coastguard Worker hb_codepoint_t a,
135*2d1272b8SAndroid Build Coastguard Worker hb_codepoint_t b,
136*2d1272b8SAndroid Build Coastguard Worker hb_codepoint_t *ab);
137*2d1272b8SAndroid Build Coastguard Worker
138*2d1272b8SAndroid Build Coastguard Worker /* setup_masks()
139*2d1272b8SAndroid Build Coastguard Worker * Called during shape().
140*2d1272b8SAndroid Build Coastguard Worker * Shapers should use map to get feature masks and set on buffer.
141*2d1272b8SAndroid Build Coastguard Worker * Shapers may NOT modify characters.
142*2d1272b8SAndroid Build Coastguard Worker * May be NULL.
143*2d1272b8SAndroid Build Coastguard Worker */
144*2d1272b8SAndroid Build Coastguard Worker void (*setup_masks) (const hb_ot_shape_plan_t *plan,
145*2d1272b8SAndroid Build Coastguard Worker hb_buffer_t *buffer,
146*2d1272b8SAndroid Build Coastguard Worker hb_font_t *font);
147*2d1272b8SAndroid Build Coastguard Worker
148*2d1272b8SAndroid Build Coastguard Worker /* reorder_marks()
149*2d1272b8SAndroid Build Coastguard Worker * Called during shape().
150*2d1272b8SAndroid Build Coastguard Worker * Shapers can use to modify ordering of combining marks.
151*2d1272b8SAndroid Build Coastguard Worker * May be NULL.
152*2d1272b8SAndroid Build Coastguard Worker */
153*2d1272b8SAndroid Build Coastguard Worker void (*reorder_marks) (const hb_ot_shape_plan_t *plan,
154*2d1272b8SAndroid Build Coastguard Worker hb_buffer_t *buffer,
155*2d1272b8SAndroid Build Coastguard Worker unsigned int start,
156*2d1272b8SAndroid Build Coastguard Worker unsigned int end);
157*2d1272b8SAndroid Build Coastguard Worker
158*2d1272b8SAndroid Build Coastguard Worker /* gpos_tag()
159*2d1272b8SAndroid Build Coastguard Worker * If not HB_TAG_NONE, then must match found GPOS script tag for
160*2d1272b8SAndroid Build Coastguard Worker * GPOS to be applied. Otherwise, fallback positioning will be used.
161*2d1272b8SAndroid Build Coastguard Worker */
162*2d1272b8SAndroid Build Coastguard Worker hb_tag_t gpos_tag;
163*2d1272b8SAndroid Build Coastguard Worker
164*2d1272b8SAndroid Build Coastguard Worker hb_ot_shape_normalization_mode_t normalization_preference;
165*2d1272b8SAndroid Build Coastguard Worker
166*2d1272b8SAndroid Build Coastguard Worker hb_ot_shape_zero_width_marks_type_t zero_width_marks;
167*2d1272b8SAndroid Build Coastguard Worker
168*2d1272b8SAndroid Build Coastguard Worker bool fallback_position;
169*2d1272b8SAndroid Build Coastguard Worker };
170*2d1272b8SAndroid Build Coastguard Worker
171*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_SHAPER_IMPLEMENT(name) extern HB_INTERNAL const hb_ot_shaper_t _hb_ot_shaper_##name;
172*2d1272b8SAndroid Build Coastguard Worker HB_OT_SHAPERS_IMPLEMENT_SHAPERS
173*2d1272b8SAndroid Build Coastguard Worker #undef HB_OT_SHAPER_IMPLEMENT
174*2d1272b8SAndroid Build Coastguard Worker
175*2d1272b8SAndroid Build Coastguard Worker
176*2d1272b8SAndroid Build Coastguard Worker static inline const hb_ot_shaper_t *
hb_ot_shaper_categorize(hb_script_t script,hb_direction_t direction,hb_tag_t gsub_script)177*2d1272b8SAndroid Build Coastguard Worker hb_ot_shaper_categorize (hb_script_t script,
178*2d1272b8SAndroid Build Coastguard Worker hb_direction_t direction,
179*2d1272b8SAndroid Build Coastguard Worker hb_tag_t gsub_script)
180*2d1272b8SAndroid Build Coastguard Worker {
181*2d1272b8SAndroid Build Coastguard Worker switch ((hb_tag_t) script)
182*2d1272b8SAndroid Build Coastguard Worker {
183*2d1272b8SAndroid Build Coastguard Worker default:
184*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_default;
185*2d1272b8SAndroid Build Coastguard Worker
186*2d1272b8SAndroid Build Coastguard Worker
187*2d1272b8SAndroid Build Coastguard Worker /* Unicode-1.1 additions */
188*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_ARABIC:
189*2d1272b8SAndroid Build Coastguard Worker
190*2d1272b8SAndroid Build Coastguard Worker /* Unicode-3.0 additions */
191*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_SYRIAC:
192*2d1272b8SAndroid Build Coastguard Worker
193*2d1272b8SAndroid Build Coastguard Worker /* For Arabic script, use the Arabic shaper even if no OT script tag was found.
194*2d1272b8SAndroid Build Coastguard Worker * This is because we do fallback shaping for Arabic script (and not others).
195*2d1272b8SAndroid Build Coastguard Worker * But note that Arabic shaping is applicable only to horizontal layout; for
196*2d1272b8SAndroid Build Coastguard Worker * vertical text, just use the generic shaper instead. */
197*2d1272b8SAndroid Build Coastguard Worker if ((gsub_script != HB_OT_TAG_DEFAULT_SCRIPT || script == HB_SCRIPT_ARABIC) &&
198*2d1272b8SAndroid Build Coastguard Worker HB_DIRECTION_IS_HORIZONTAL (direction))
199*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_arabic;
200*2d1272b8SAndroid Build Coastguard Worker else
201*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_default;
202*2d1272b8SAndroid Build Coastguard Worker
203*2d1272b8SAndroid Build Coastguard Worker
204*2d1272b8SAndroid Build Coastguard Worker /* Unicode-1.1 additions */
205*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_THAI:
206*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_LAO:
207*2d1272b8SAndroid Build Coastguard Worker
208*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_thai;
209*2d1272b8SAndroid Build Coastguard Worker
210*2d1272b8SAndroid Build Coastguard Worker
211*2d1272b8SAndroid Build Coastguard Worker /* Unicode-1.1 additions */
212*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_HANGUL:
213*2d1272b8SAndroid Build Coastguard Worker
214*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_hangul;
215*2d1272b8SAndroid Build Coastguard Worker
216*2d1272b8SAndroid Build Coastguard Worker
217*2d1272b8SAndroid Build Coastguard Worker /* Unicode-1.1 additions */
218*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_HEBREW:
219*2d1272b8SAndroid Build Coastguard Worker
220*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_hebrew;
221*2d1272b8SAndroid Build Coastguard Worker
222*2d1272b8SAndroid Build Coastguard Worker
223*2d1272b8SAndroid Build Coastguard Worker /* Unicode-1.1 additions */
224*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_BENGALI:
225*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_DEVANAGARI:
226*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_GUJARATI:
227*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_GURMUKHI:
228*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_KANNADA:
229*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MALAYALAM:
230*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_ORIYA:
231*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TAMIL:
232*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TELUGU:
233*2d1272b8SAndroid Build Coastguard Worker
234*2d1272b8SAndroid Build Coastguard Worker /* If the designer designed the font for the 'DFLT' script,
235*2d1272b8SAndroid Build Coastguard Worker * (or we ended up arbitrarily pick 'latn'), use the default shaper.
236*2d1272b8SAndroid Build Coastguard Worker * Otherwise, use the specific shaper.
237*2d1272b8SAndroid Build Coastguard Worker *
238*2d1272b8SAndroid Build Coastguard Worker * If it's indy3 tag, send to USE. */
239*2d1272b8SAndroid Build Coastguard Worker if (gsub_script == HB_TAG ('D','F','L','T') ||
240*2d1272b8SAndroid Build Coastguard Worker gsub_script == HB_TAG ('l','a','t','n'))
241*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_default;
242*2d1272b8SAndroid Build Coastguard Worker else if ((gsub_script & 0x000000FF) == '3')
243*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_use;
244*2d1272b8SAndroid Build Coastguard Worker else
245*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_indic;
246*2d1272b8SAndroid Build Coastguard Worker
247*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_KHMER:
248*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_khmer;
249*2d1272b8SAndroid Build Coastguard Worker
250*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MYANMAR:
251*2d1272b8SAndroid Build Coastguard Worker /* If the designer designed the font for the 'DFLT' script,
252*2d1272b8SAndroid Build Coastguard Worker * (or we ended up arbitrarily pick 'latn'), use the default shaper.
253*2d1272b8SAndroid Build Coastguard Worker * Otherwise, use the specific shaper.
254*2d1272b8SAndroid Build Coastguard Worker *
255*2d1272b8SAndroid Build Coastguard Worker * If designer designed for 'mymr' tag, also send to default
256*2d1272b8SAndroid Build Coastguard Worker * shaper. That's tag used from before Myanmar shaping spec
257*2d1272b8SAndroid Build Coastguard Worker * was developed. The shaping spec uses 'mym2' tag. */
258*2d1272b8SAndroid Build Coastguard Worker if (gsub_script == HB_TAG ('D','F','L','T') ||
259*2d1272b8SAndroid Build Coastguard Worker gsub_script == HB_TAG ('l','a','t','n') ||
260*2d1272b8SAndroid Build Coastguard Worker gsub_script == HB_TAG ('m','y','m','r'))
261*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_default;
262*2d1272b8SAndroid Build Coastguard Worker else
263*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_myanmar;
264*2d1272b8SAndroid Build Coastguard Worker
265*2d1272b8SAndroid Build Coastguard Worker
266*2d1272b8SAndroid Build Coastguard Worker #ifndef HB_NO_OT_SHAPER_MYANMAR_ZAWGYI
267*2d1272b8SAndroid Build Coastguard Worker #define HB_SCRIPT_MYANMAR_ZAWGYI ((hb_script_t) HB_TAG ('Q','a','a','g'))
268*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MYANMAR_ZAWGYI:
269*2d1272b8SAndroid Build Coastguard Worker /* https://github.com/harfbuzz/harfbuzz/issues/1162 */
270*2d1272b8SAndroid Build Coastguard Worker
271*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_myanmar_zawgyi;
272*2d1272b8SAndroid Build Coastguard Worker #endif
273*2d1272b8SAndroid Build Coastguard Worker
274*2d1272b8SAndroid Build Coastguard Worker
275*2d1272b8SAndroid Build Coastguard Worker /* Unicode-2.0 additions */
276*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TIBETAN:
277*2d1272b8SAndroid Build Coastguard Worker
278*2d1272b8SAndroid Build Coastguard Worker /* Unicode-3.0 additions */
279*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MONGOLIAN:
280*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_SINHALA:
281*2d1272b8SAndroid Build Coastguard Worker
282*2d1272b8SAndroid Build Coastguard Worker /* Unicode-3.2 additions */
283*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_BUHID:
284*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_HANUNOO:
285*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TAGALOG:
286*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TAGBANWA:
287*2d1272b8SAndroid Build Coastguard Worker
288*2d1272b8SAndroid Build Coastguard Worker /* Unicode-4.0 additions */
289*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_LIMBU:
290*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TAI_LE:
291*2d1272b8SAndroid Build Coastguard Worker
292*2d1272b8SAndroid Build Coastguard Worker /* Unicode-4.1 additions */
293*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_BUGINESE:
294*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_KHAROSHTHI:
295*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_SYLOTI_NAGRI:
296*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TIFINAGH:
297*2d1272b8SAndroid Build Coastguard Worker
298*2d1272b8SAndroid Build Coastguard Worker /* Unicode-5.0 additions */
299*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_BALINESE:
300*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_NKO:
301*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_PHAGS_PA:
302*2d1272b8SAndroid Build Coastguard Worker
303*2d1272b8SAndroid Build Coastguard Worker /* Unicode-5.1 additions */
304*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_CHAM:
305*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_KAYAH_LI:
306*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_LEPCHA:
307*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_REJANG:
308*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_SAURASHTRA:
309*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_SUNDANESE:
310*2d1272b8SAndroid Build Coastguard Worker
311*2d1272b8SAndroid Build Coastguard Worker /* Unicode-5.2 additions */
312*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_EGYPTIAN_HIEROGLYPHS:
313*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_JAVANESE:
314*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_KAITHI:
315*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MEETEI_MAYEK:
316*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TAI_THAM:
317*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TAI_VIET:
318*2d1272b8SAndroid Build Coastguard Worker
319*2d1272b8SAndroid Build Coastguard Worker /* Unicode-6.0 additions */
320*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_BATAK:
321*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_BRAHMI:
322*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MANDAIC:
323*2d1272b8SAndroid Build Coastguard Worker
324*2d1272b8SAndroid Build Coastguard Worker /* Unicode-6.1 additions */
325*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_CHAKMA:
326*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MIAO:
327*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_SHARADA:
328*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TAKRI:
329*2d1272b8SAndroid Build Coastguard Worker
330*2d1272b8SAndroid Build Coastguard Worker /* Unicode-7.0 additions */
331*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_DUPLOYAN:
332*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_GRANTHA:
333*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_KHOJKI:
334*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_KHUDAWADI:
335*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MAHAJANI:
336*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MANICHAEAN:
337*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MODI:
338*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_PAHAWH_HMONG:
339*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_PSALTER_PAHLAVI:
340*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_SIDDHAM:
341*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TIRHUTA:
342*2d1272b8SAndroid Build Coastguard Worker
343*2d1272b8SAndroid Build Coastguard Worker /* Unicode-8.0 additions */
344*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_AHOM:
345*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MULTANI:
346*2d1272b8SAndroid Build Coastguard Worker
347*2d1272b8SAndroid Build Coastguard Worker /* Unicode-9.0 additions */
348*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_ADLAM:
349*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_BHAIKSUKI:
350*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MARCHEN:
351*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_NEWA:
352*2d1272b8SAndroid Build Coastguard Worker
353*2d1272b8SAndroid Build Coastguard Worker /* Unicode-10.0 additions */
354*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MASARAM_GONDI:
355*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_SOYOMBO:
356*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_ZANABAZAR_SQUARE:
357*2d1272b8SAndroid Build Coastguard Worker
358*2d1272b8SAndroid Build Coastguard Worker /* Unicode-11.0 additions */
359*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_DOGRA:
360*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_GUNJALA_GONDI:
361*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_HANIFI_ROHINGYA:
362*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MAKASAR:
363*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_MEDEFAIDRIN:
364*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_OLD_SOGDIAN:
365*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_SOGDIAN:
366*2d1272b8SAndroid Build Coastguard Worker
367*2d1272b8SAndroid Build Coastguard Worker /* Unicode-12.0 additions */
368*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_ELYMAIC:
369*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_NANDINAGARI:
370*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_NYIAKENG_PUACHUE_HMONG:
371*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_WANCHO:
372*2d1272b8SAndroid Build Coastguard Worker
373*2d1272b8SAndroid Build Coastguard Worker /* Unicode-13.0 additions */
374*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_CHORASMIAN:
375*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_DIVES_AKURU:
376*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_KHITAN_SMALL_SCRIPT:
377*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_YEZIDI:
378*2d1272b8SAndroid Build Coastguard Worker
379*2d1272b8SAndroid Build Coastguard Worker /* Unicode-14.0 additions */
380*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_CYPRO_MINOAN:
381*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_OLD_UYGHUR:
382*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TANGSA:
383*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TOTO:
384*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_VITHKUQI:
385*2d1272b8SAndroid Build Coastguard Worker
386*2d1272b8SAndroid Build Coastguard Worker /* Unicode-15.0 additions */
387*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_KAWI:
388*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_NAG_MUNDARI:
389*2d1272b8SAndroid Build Coastguard Worker
390*2d1272b8SAndroid Build Coastguard Worker /* Unicode-16.0 additions */
391*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_GARAY:
392*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_GURUNG_KHEMA:
393*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_KIRAT_RAI:
394*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_OL_ONAL:
395*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_SUNUWAR:
396*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TODHRI:
397*2d1272b8SAndroid Build Coastguard Worker case HB_SCRIPT_TULU_TIGALARI:
398*2d1272b8SAndroid Build Coastguard Worker
399*2d1272b8SAndroid Build Coastguard Worker /* If the designer designed the font for the 'DFLT' script,
400*2d1272b8SAndroid Build Coastguard Worker * (or we ended up arbitrarily pick 'latn'), use the default shaper.
401*2d1272b8SAndroid Build Coastguard Worker * Otherwise, use the specific shaper.
402*2d1272b8SAndroid Build Coastguard Worker * Note that for some simple scripts, there may not be *any*
403*2d1272b8SAndroid Build Coastguard Worker * GSUB/GPOS needed, so there may be no scripts found! */
404*2d1272b8SAndroid Build Coastguard Worker if (gsub_script == HB_TAG ('D','F','L','T') ||
405*2d1272b8SAndroid Build Coastguard Worker gsub_script == HB_TAG ('l','a','t','n'))
406*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_default;
407*2d1272b8SAndroid Build Coastguard Worker else
408*2d1272b8SAndroid Build Coastguard Worker return &_hb_ot_shaper_use;
409*2d1272b8SAndroid Build Coastguard Worker }
410*2d1272b8SAndroid Build Coastguard Worker }
411*2d1272b8SAndroid Build Coastguard Worker
412*2d1272b8SAndroid Build Coastguard Worker
413*2d1272b8SAndroid Build Coastguard Worker #endif /* HB_OT_SHAPER_HH */
414