![]() |
|
|||
File indexing completed on 2025-02-21 10:04:02
0001 /* 0002 * Copyright © 2016 Igalia S.L. 0003 * 0004 * This is part of HarfBuzz, a text shaping library. 0005 * 0006 * Permission is hereby granted, without written agreement and without 0007 * license or royalty fees, to use, copy, modify, and distribute this 0008 * software and its documentation for any purpose, provided that the 0009 * above copyright notice and the following two paragraphs appear in 0010 * all copies of this software. 0011 * 0012 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 0013 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 0014 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 0015 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 0016 * DAMAGE. 0017 * 0018 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 0019 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 0020 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 0021 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 0022 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 0023 * 0024 * Igalia Author(s): Frédéric Wang 0025 */ 0026 0027 #if !defined(HB_OT_H_IN) && !defined(HB_NO_SINGLE_HEADER_ERROR) 0028 #error "Include <hb-ot.h> instead." 0029 #endif 0030 0031 #ifndef HB_OT_MATH_H 0032 #define HB_OT_MATH_H 0033 0034 #include "hb.h" 0035 0036 HB_BEGIN_DECLS 0037 0038 0039 /* 0040 * MATH 0041 */ 0042 0043 /** 0044 * HB_OT_TAG_MATH: 0045 * 0046 * OpenType [Mathematical Typesetting Table](https://docs.microsoft.com/en-us/typography/opentype/spec/math). 0047 * 0048 * Since: 1.3.3 0049 */ 0050 #define HB_OT_TAG_MATH HB_TAG('M','A','T','H') 0051 0052 /** 0053 * HB_OT_TAG_MATH_SCRIPT: 0054 * 0055 * OpenType script tag, `math`, for features specific to math shaping. 0056 * 0057 * <note>#HB_OT_TAG_MATH_SCRIPT is not a valid #hb_script_t and should only be 0058 * used with functions that accept raw OpenType script tags, such as 0059 * #hb_ot_layout_collect_features. In other cases, #HB_SCRIPT_MATH should be 0060 * used instead.</note> 0061 * 0062 * Since: 3.4.0 0063 */ 0064 #define HB_OT_TAG_MATH_SCRIPT HB_TAG('m','a','t','h') 0065 0066 /* Types */ 0067 0068 /** 0069 * hb_ot_math_constant_t: 0070 * @HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN: scriptPercentScaleDown 0071 * @HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN: scriptScriptPercentScaleDown 0072 * @HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT: delimitedSubFormulaMinHeight 0073 * @HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT: displayOperatorMinHeight 0074 * @HB_OT_MATH_CONSTANT_MATH_LEADING: mathLeading 0075 * @HB_OT_MATH_CONSTANT_AXIS_HEIGHT: axisHeight 0076 * @HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT: accentBaseHeight 0077 * @HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT: flattenedAccentBaseHeight 0078 * @HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN: subscriptShiftDown 0079 * @HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX: subscriptTopMax 0080 * @HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN: subscriptBaselineDropMin 0081 * @HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP: superscriptShiftUp 0082 * @HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED: superscriptShiftUpCramped 0083 * @HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN: superscriptBottomMin 0084 * @HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX: superscriptBaselineDropMax 0085 * @HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN: subSuperscriptGapMin 0086 * @HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT: superscriptBottomMaxWithSubscript 0087 * @HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT: spaceAfterScript 0088 * @HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN: upperLimitGapMin 0089 * @HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN: upperLimitBaselineRiseMin 0090 * @HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN: lowerLimitGapMin 0091 * @HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN: lowerLimitBaselineDropMin 0092 * @HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP: stackTopShiftUp 0093 * @HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP: stackTopDisplayStyleShiftUp 0094 * @HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN: stackBottomShiftDown 0095 * @HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN: stackBottomDisplayStyleShiftDown 0096 * @HB_OT_MATH_CONSTANT_STACK_GAP_MIN: stackGapMin 0097 * @HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN: stackDisplayStyleGapMin 0098 * @HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP: stretchStackTopShiftUp 0099 * @HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN: stretchStackBottomShiftDown 0100 * @HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN: stretchStackGapAboveMin 0101 * @HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN: stretchStackGapBelowMin 0102 * @HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP: fractionNumeratorShiftUp 0103 * @HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP: fractionNumeratorDisplayStyleShiftUp 0104 * @HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN: fractionDenominatorShiftDown 0105 * @HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN: fractionDenominatorDisplayStyleShiftDown 0106 * @HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN: fractionNumeratorGapMin 0107 * @HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN: fractionNumDisplayStyleGapMin 0108 * @HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS: fractionRuleThickness 0109 * @HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN: fractionDenominatorGapMin 0110 * @HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN: fractionDenomDisplayStyleGapMin 0111 * @HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP: skewedFractionHorizontalGap 0112 * @HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP: skewedFractionVerticalGap 0113 * @HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP: overbarVerticalGap 0114 * @HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS: overbarRuleThickness 0115 * @HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER: overbarExtraAscender 0116 * @HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP: underbarVerticalGap 0117 * @HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS: underbarRuleThickness 0118 * @HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER: underbarExtraDescender 0119 * @HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP: radicalVerticalGap 0120 * @HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP: radicalDisplayStyleVerticalGap 0121 * @HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS: radicalRuleThickness 0122 * @HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER: radicalExtraAscender 0123 * @HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE: radicalKernBeforeDegree 0124 * @HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE: radicalKernAfterDegree 0125 * @HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT: radicalDegreeBottomRaisePercent 0126 * 0127 * The 'MATH' table constants, refer to 0128 * [OpenType documentation](https://docs.microsoft.com/en-us/typography/opentype/spec/math#mathconstants-table) 0129 * For more explanations. 0130 * 0131 * Since: 1.3.3 0132 */ 0133 typedef enum { 0134 HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN = 0, 0135 HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN = 1, 0136 HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT = 2, 0137 HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT = 3, 0138 HB_OT_MATH_CONSTANT_MATH_LEADING = 4, 0139 HB_OT_MATH_CONSTANT_AXIS_HEIGHT = 5, 0140 HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT = 6, 0141 HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT = 7, 0142 HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN = 8, 0143 HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX = 9, 0144 HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN = 10, 0145 HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP = 11, 0146 HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED = 12, 0147 HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN = 13, 0148 HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX = 14, 0149 HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN = 15, 0150 HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT = 16, 0151 HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT = 17, 0152 HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN = 18, 0153 HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN = 19, 0154 HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN = 20, 0155 HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN = 21, 0156 HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP = 22, 0157 HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP = 23, 0158 HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN = 24, 0159 HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN = 25, 0160 HB_OT_MATH_CONSTANT_STACK_GAP_MIN = 26, 0161 HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN = 27, 0162 HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP = 28, 0163 HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN = 29, 0164 HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN = 30, 0165 HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN = 31, 0166 HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP = 32, 0167 HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP = 33, 0168 HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN = 34, 0169 HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN = 35, 0170 HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN = 36, 0171 HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN = 37, 0172 HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS = 38, 0173 HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN = 39, 0174 HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN = 40, 0175 HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP = 41, 0176 HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP = 42, 0177 HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP = 43, 0178 HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS = 44, 0179 HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER = 45, 0180 HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP = 46, 0181 HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS = 47, 0182 HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER = 48, 0183 HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP = 49, 0184 HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP = 50, 0185 HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS = 51, 0186 HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER = 52, 0187 HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE = 53, 0188 HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE = 54, 0189 HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT = 55 0190 } hb_ot_math_constant_t; 0191 0192 /** 0193 * hb_ot_math_kern_t: 0194 * @HB_OT_MATH_KERN_TOP_RIGHT: The top right corner of the glyph. 0195 * @HB_OT_MATH_KERN_TOP_LEFT: The top left corner of the glyph. 0196 * @HB_OT_MATH_KERN_BOTTOM_RIGHT: The bottom right corner of the glyph. 0197 * @HB_OT_MATH_KERN_BOTTOM_LEFT: The bottom left corner of the glyph. 0198 * 0199 * The math kerning-table types defined for the four corners 0200 * of a glyph. 0201 * 0202 * Since: 1.3.3 0203 */ 0204 typedef enum { 0205 HB_OT_MATH_KERN_TOP_RIGHT = 0, 0206 HB_OT_MATH_KERN_TOP_LEFT = 1, 0207 HB_OT_MATH_KERN_BOTTOM_RIGHT = 2, 0208 HB_OT_MATH_KERN_BOTTOM_LEFT = 3 0209 } hb_ot_math_kern_t; 0210 0211 /** 0212 * hb_ot_math_kern_entry_t: 0213 * @max_correction_height: The maximum height at which this entry should be used 0214 * @kern_value: The kern value of the entry 0215 * 0216 * Data type to hold math kerning (cut-in) information for a glyph. 0217 * 0218 * Since: 3.4.0 0219 */ 0220 typedef struct { 0221 hb_position_t max_correction_height; 0222 hb_position_t kern_value; 0223 } hb_ot_math_kern_entry_t; 0224 0225 /** 0226 * hb_ot_math_glyph_variant_t: 0227 * @glyph: The glyph index of the variant 0228 * @advance: The advance width of the variant 0229 * 0230 * Data type to hold math-variant information for a glyph. 0231 * 0232 * Since: 1.3.3 0233 */ 0234 typedef struct hb_ot_math_glyph_variant_t { 0235 hb_codepoint_t glyph; 0236 hb_position_t advance; 0237 } hb_ot_math_glyph_variant_t; 0238 0239 /** 0240 * hb_ot_math_glyph_part_flags_t: 0241 * @HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER: This is an extender glyph part that 0242 * can be repeated to reach the desired length. 0243 * 0244 * Flags for math glyph parts. 0245 * 0246 * Since: 1.3.3 0247 */ 0248 typedef enum { /*< flags >*/ 0249 HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER = 0x00000001u /* Extender glyph */ 0250 } hb_ot_math_glyph_part_flags_t; 0251 0252 /** 0253 * hb_ot_math_glyph_part_t: 0254 * @glyph: The glyph index of the variant part 0255 * @start_connector_length: The length of the connector on the starting side of the variant part 0256 * @end_connector_length: The length of the connector on the ending side of the variant part 0257 * @full_advance: The total advance of the part 0258 * @flags: #hb_ot_math_glyph_part_flags_t flags for the part 0259 * 0260 * Data type to hold information for a "part" component of a math-variant glyph. 0261 * Large variants for stretchable math glyphs (such as parentheses) can be constructed 0262 * on the fly from parts. 0263 * 0264 * Since: 1.3.3 0265 */ 0266 typedef struct hb_ot_math_glyph_part_t { 0267 hb_codepoint_t glyph; 0268 hb_position_t start_connector_length; 0269 hb_position_t end_connector_length; 0270 hb_position_t full_advance; 0271 hb_ot_math_glyph_part_flags_t flags; 0272 } hb_ot_math_glyph_part_t; 0273 0274 /* Methods */ 0275 0276 HB_EXTERN hb_bool_t 0277 hb_ot_math_has_data (hb_face_t *face); 0278 0279 HB_EXTERN hb_position_t 0280 hb_ot_math_get_constant (hb_font_t *font, 0281 hb_ot_math_constant_t constant); 0282 0283 HB_EXTERN hb_position_t 0284 hb_ot_math_get_glyph_italics_correction (hb_font_t *font, 0285 hb_codepoint_t glyph); 0286 0287 HB_EXTERN hb_position_t 0288 hb_ot_math_get_glyph_top_accent_attachment (hb_font_t *font, 0289 hb_codepoint_t glyph); 0290 0291 HB_EXTERN hb_bool_t 0292 hb_ot_math_is_glyph_extended_shape (hb_face_t *face, 0293 hb_codepoint_t glyph); 0294 0295 HB_EXTERN hb_position_t 0296 hb_ot_math_get_glyph_kerning (hb_font_t *font, 0297 hb_codepoint_t glyph, 0298 hb_ot_math_kern_t kern, 0299 hb_position_t correction_height); 0300 0301 HB_EXTERN unsigned int 0302 hb_ot_math_get_glyph_kernings (hb_font_t *font, 0303 hb_codepoint_t glyph, 0304 hb_ot_math_kern_t kern, 0305 unsigned int start_offset, 0306 unsigned int *entries_count, /* IN/OUT */ 0307 hb_ot_math_kern_entry_t *kern_entries /* OUT */); 0308 0309 HB_EXTERN unsigned int 0310 hb_ot_math_get_glyph_variants (hb_font_t *font, 0311 hb_codepoint_t glyph, 0312 hb_direction_t direction, 0313 unsigned int start_offset, 0314 unsigned int *variants_count, /* IN/OUT */ 0315 hb_ot_math_glyph_variant_t *variants /* OUT */); 0316 0317 HB_EXTERN hb_position_t 0318 hb_ot_math_get_min_connector_overlap (hb_font_t *font, 0319 hb_direction_t direction); 0320 0321 HB_EXTERN unsigned int 0322 hb_ot_math_get_glyph_assembly (hb_font_t *font, 0323 hb_codepoint_t glyph, 0324 hb_direction_t direction, 0325 unsigned int start_offset, 0326 unsigned int *parts_count, /* IN/OUT */ 0327 hb_ot_math_glyph_part_t *parts, /* OUT */ 0328 hb_position_t *italics_correction /* OUT */); 0329 0330 0331 HB_END_DECLS 0332 0333 #endif /* HB_OT_MATH_H */
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |