• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright © 2016  Igalia S.L.
3   *
4   *  This is part of HarfBuzz, a text shaping library.
5   *
6   * Permission is hereby granted, without written agreement and without
7   * license or royalty fees, to use, copy, modify, and distribute this
8   * software and its documentation for any purpose, provided that the
9   * above copyright notice and the following two paragraphs appear in
10   * all copies of this software.
11   *
12   * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13   * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14   * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15   * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16   * DAMAGE.
17   *
18   * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19   * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20   * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
21   * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22   * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23   *
24   * Igalia Author(s): Frédéric Wang
25   */
26  
27  #ifndef HB_OT_H_IN
28  #error "Include <hb-ot.h> instead."
29  #endif
30  
31  #ifndef HB_OT_MATH_H
32  #define HB_OT_MATH_H
33  
34  #include "hb.h"
35  
36  HB_BEGIN_DECLS
37  
38  
39  /*
40   * MATH
41   */
42  
43  #define HB_OT_TAG_MATH HB_TAG('M','A','T','H')
44  
45  /* Use with hb_buffer_set_script() for math shaping. */
46  #define HB_OT_MATH_SCRIPT HB_TAG('m','a','t','h')
47  
48  /* Types */
49  
50  /**
51   * hb_ot_math_constant_t:
52   *
53   * Since: 1.3.3
54   */
55  typedef enum {
56    HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN = 0,
57    HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN = 1,
58    HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT = 2,
59    HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT = 3,
60    HB_OT_MATH_CONSTANT_MATH_LEADING = 4,
61    HB_OT_MATH_CONSTANT_AXIS_HEIGHT = 5,
62    HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT = 6,
63    HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT = 7,
64    HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN = 8,
65    HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX = 9,
66    HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN = 10,
67    HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP = 11,
68    HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED = 12,
69    HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN = 13,
70    HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX = 14,
71    HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN = 15,
72    HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT = 16,
73    HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT = 17,
74    HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN = 18,
75    HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN = 19,
76    HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN = 20,
77    HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN = 21,
78    HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP = 22,
79    HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP = 23,
80    HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN = 24,
81    HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN = 25,
82    HB_OT_MATH_CONSTANT_STACK_GAP_MIN = 26,
83    HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN = 27,
84    HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP = 28,
85    HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN = 29,
86    HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN = 30,
87    HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN = 31,
88    HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP = 32,
89    HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP = 33,
90    HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN = 34,
91    HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN = 35,
92    HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN = 36,
93    HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN = 37,
94    HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS = 38,
95    HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN = 39,
96    HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN = 40,
97    HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP = 41,
98    HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP = 42,
99    HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP = 43,
100    HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS = 44,
101    HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER = 45,
102    HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP = 46,
103    HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS = 47,
104    HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER = 48,
105    HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP = 49,
106    HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP = 50,
107    HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS = 51,
108    HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER = 52,
109    HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE = 53,
110    HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE = 54,
111    HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT = 55
112  } hb_ot_math_constant_t;
113  
114  /**
115   * hb_ot_math_kern_t:
116   *
117   * Since: 1.3.3
118   */
119  typedef enum {
120    HB_OT_MATH_KERN_TOP_RIGHT = 0,
121    HB_OT_MATH_KERN_TOP_LEFT = 1,
122    HB_OT_MATH_KERN_BOTTOM_RIGHT = 2,
123    HB_OT_MATH_KERN_BOTTOM_LEFT = 3
124  } hb_ot_math_kern_t;
125  
126  /**
127   * hb_ot_math_glyph_variant_t:
128   *
129   * Since: 1.3.3
130   */
131  typedef struct hb_ot_math_glyph_variant_t {
132    hb_codepoint_t glyph;
133    hb_position_t advance;
134  } hb_ot_math_glyph_variant_t;
135  
136  /**
137   * hb_ot_math_glyph_part_flags_t:
138   *
139   * Since: 1.3.3
140   */
141  typedef enum { /*< flags >*/
142    HB_MATH_GLYPH_PART_FLAG_EXTENDER	= 0x00000001u  /* Extender glyph */
143  } hb_ot_math_glyph_part_flags_t;
144  
145  /**
146   * hb_ot_math_glyph_part_t:
147   *
148   * Since: 1.3.3
149   */
150  typedef struct hb_ot_math_glyph_part_t {
151    hb_codepoint_t glyph;
152    hb_position_t start_connector_length;
153    hb_position_t end_connector_length;
154    hb_position_t full_advance;
155    hb_ot_math_glyph_part_flags_t flags;
156  } hb_ot_math_glyph_part_t;
157  
158  /* Methods */
159  
160  HB_EXTERN hb_bool_t
161  hb_ot_math_has_data (hb_face_t *face);
162  
163  HB_EXTERN hb_position_t
164  hb_ot_math_get_constant (hb_font_t *font,
165  			 hb_ot_math_constant_t constant);
166  
167  HB_EXTERN hb_position_t
168  hb_ot_math_get_glyph_italics_correction (hb_font_t *font,
169  					 hb_codepoint_t glyph);
170  
171  HB_EXTERN hb_position_t
172  hb_ot_math_get_glyph_top_accent_attachment (hb_font_t *font,
173  					    hb_codepoint_t glyph);
174  
175  HB_EXTERN hb_bool_t
176  hb_ot_math_is_glyph_extended_shape (hb_face_t *face,
177  				    hb_codepoint_t glyph);
178  
179  HB_EXTERN hb_position_t
180  hb_ot_math_get_glyph_kerning (hb_font_t *font,
181  			      hb_codepoint_t glyph,
182  			      hb_ot_math_kern_t kern,
183  			      hb_position_t correction_height);
184  
185  HB_EXTERN unsigned int
186  hb_ot_math_get_glyph_variants (hb_font_t *font,
187  			       hb_codepoint_t glyph,
188  			       hb_direction_t direction,
189  			       unsigned int start_offset,
190  			       unsigned int *variants_count, /* IN/OUT */
191  			       hb_ot_math_glyph_variant_t *variants /* OUT */);
192  
193  HB_EXTERN hb_position_t
194  hb_ot_math_get_min_connector_overlap (hb_font_t *font,
195  				      hb_direction_t direction);
196  
197  HB_EXTERN unsigned int
198  hb_ot_math_get_glyph_assembly (hb_font_t *font,
199  			       hb_codepoint_t glyph,
200  			       hb_direction_t direction,
201  			       unsigned int start_offset,
202  			       unsigned int *parts_count, /* IN/OUT */
203  			       hb_ot_math_glyph_part_t *parts, /* OUT */
204  			       hb_position_t *italics_correction /* OUT */);
205  
206  
207  HB_END_DECLS
208  
209  #endif /* HB_OT_MATH_H */
210