protected:
HBINT16 value; /* The X or Y value in design units */
Offset16To<Device> deviceTable; /* Offset to the device table - from the * beginning of parent table. May be NULL.
* Suggested format for device table is 1. */
unsigned count = ARRAY_LENGTH (mathValueRecords); for (unsigned i = 0; i < count; i++) if (!c->copy (mathValueRecords[i], this))
return_trace (nullptr);
if (!c->embed (radicalDegreeBottomRaisePercent)) return_trace (nullptr);
return_trace (out);
}
unsignedint count = ARRAY_LENGTH (mathValueRecords); for (unsignedint i = 0; i < count; i++) if (!mathValueRecords[i].sanitize (c, this))
return_trace (false);
case HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN: case HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN: return percentScaleDown[constant - HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN];
case HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT: case HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT: return font->em_scale_y (minHeight[constant - HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT]);
case HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE: case HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE: case HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP: case HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT: return mathValueRecords[constant - HB_OT_MATH_CONSTANT_MATH_LEADING].get_x_value (font, this);
case HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT: case HB_OT_MATH_CONSTANT_AXIS_HEIGHT: case HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT: case HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN: case HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN: case HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN: case HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN: case HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP: case HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN: case HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP: case HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN: case HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS: case HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN: case HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN: case HB_OT_MATH_CONSTANT_MATH_LEADING: case HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER: case HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS: case HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP: case HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP: case HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER: case HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS: case HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP: case HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP: case HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN: case HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN: case HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN: case HB_OT_MATH_CONSTANT_STACK_GAP_MIN: case HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP: case HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP: case HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN: case HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN: case HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN: case HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP: case HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN: case HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN: case HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX: case HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN: case HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX: case HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT: case HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN: case HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP: case HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED: case HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER: case HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS: case HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP: case HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN: case HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN: return mathValueRecords[constant - HB_OT_MATH_CONSTANT_MATH_LEADING].get_y_value (font, this);
case HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT: return radicalDegreeBottomRaisePercent;
protected:
Offset16To<Coverage> topAccentCoverage; /* Offset to Coverage table - * from the beginning of * MathTopAccentAttachment
* table. */
Array16Of<MathValueRecord> topAccentAttachment; /* Array of MathValueRecords * defining top accent * attachment points for each
* covered glyph. */
/* According to OpenType spec (v1.9), except for the boundary cases, the index * chosen for kern value should be i such that * correctionHeight[i-1] <= correction_height < correctionHeight[i] * We can use the binary search algorithm of std::upper_bound(). Or, we can * use the internal hb_bsearch_impl.
*/ unsignedint pos; auto cmp = +[](constvoid* key, constvoid* p, int sign, hb_font_t* font, const MathKern* mathKern) -> int { return sign * *(hb_position_t*)key - sign * ((MathValueRecord*)p)->get_y_value(font, mathKern);
}; unsignedint i = hb_bsearch_impl(&pos, correction_height, correctionHeight,
heightCount, MathValueRecord::static_size,
cmp, sign, font, this) ? pos + 1 : pos; return kernValue[i].get_x_value (font, this);
}
protected:
HBUINT16 heightCount;
UnsizedArrayOf<MathValueRecord>
mathValueRecordsZ; /* Array of correction heights at * which the kern value changes. * Sorted by the height value in * design units (heightCount entries), * Followed by: * Array of kern values corresponding * to heights. (heightCount+1 entries).
*/
protected:
Offset16To<Coverage>
mathKernCoverage; /* Offset to Coverage table - * from the beginning of the
* MathKernInfo table. */
Array16Of<MathKernInfoRecord>
mathKernInfoRecords; /* Array of MathKernInfoRecords, * per-glyph information for * mathematical positioning * of subscripts and
* superscripts. */
protected: /* Offset to MathItalicsCorrectionInfo table -
* from the beginning of MathGlyphInfo table. */
Offset16To<MathItalicsCorrectionInfo> mathItalicsCorrectionInfo;
/* Offset to MathTopAccentAttachment table -
* from the beginning of MathGlyphInfo table. */
Offset16To<MathTopAccentAttachment> mathTopAccentAttachment;
/* Offset to coverage table for Extended Shape glyphs - * from the beginning of MathGlyphInfo table. When the left or right glyph of * a box is an extended shape variant, the (ink) box (and not the default * position defined by values in MathConstants table) should be used for
* vertical positioning purposes. May be NULL.. */
Offset16To<Coverage> extendedShapeCoverage;
/* Offset to MathKernInfo table -
* from the beginning of MathGlyphInfo table. */
Offset16To<MathKernInfo> mathKernInfo;
protected:
HBGlyphID16 variantGlyph; /* Glyph ID for the variant. */
HBUINT16 advanceMeasurement; /* Advance width/height, in design units, of the * variant, in the direction of requested
* glyph extension. */
public:
DEFINE_SIZE_STATIC (4);
};
struct PartFlags : HBUINT16
{ enum Flags {
Extender = 0x0001u, /* If set, the part can be skipped or repeated. */
protected:
HBGlyphID16 glyph; /* Glyph ID for the part. */
HBUINT16 startConnectorLength; /* Advance width/ height of the straight bar * connector material, in design units, is at * the beginning of the glyph, in the
* direction of the extension. */
HBUINT16 endConnectorLength; /* Advance width/ height of the straight bar * connector material, in design units, is at * the end of the glyph, in the direction of
* the extension. */
HBUINT16 fullAdvance; /* Full advance width/height for this part, * in the direction of the extension.
* In design units. */
PartFlags partFlags; /* Part qualifiers. */
protected:
MathValueRecord
italicsCorrection; /* Italics correction of this * MathGlyphAssembly. Should not
* depend on the assembly size. */
Array16Of<MathGlyphPartRecord>
partRecords; /* Array of part records, from * left to right and bottom to
* top. */
if (!c->serializer->check_assign (out->mathGlyphVariantRecord.len, mathGlyphVariantRecord.len, HB_SERIALIZE_ERROR_INT_OVERFLOW))
return_trace (false); for (constauto& record : mathGlyphVariantRecord.iter ()) if (!record.subset (c)) return_trace (false);
for (constauto& _ : mathGlyphVariantRecord.iter ())
_.closure_glyphs (variant_glyphs);
}
protected: /* Offset to MathGlyphAssembly table for this shape - from the beginning of
MathGlyphConstruction table. May be NULL. */
Offset16To<MathGlyphAssembly> glyphAssembly;
/* MathGlyphVariantRecords for alternative variants of the glyphs. */
Array16Of<MathGlyphVariantRecord> mathGlyphVariantRecord;
unsignedint index = (this+coverage).get_coverage (glyph); if (unlikely (index >= count)) return Null (MathGlyphConstruction);
if (!vertical)
index += vertGlyphCount;
returnthis+glyphConstruction[index];
}
protected:
HBUINT16 minConnectorOverlap; /* Minimum overlap of connecting * glyphs during glyph construction,
* in design units. */
Offset16To<Coverage> vertGlyphCoverage; /* Offset to Coverage table - * from the beginning of MathVariants
* table. */
Offset16To<Coverage> horizGlyphCoverage; /* Offset to Coverage table - * from the beginning of MathVariants
* table. */
HBUINT16 vertGlyphCount; /* Number of glyphs for which * information is provided for
* vertically growing variants. */
HBUINT16 horizGlyphCount;/* Number of glyphs for which * information is provided for
* horizontally growing variants. */
/* Array of offsets to MathGlyphConstruction tables - from the beginning of the MathVariants table, for shapes growing in vertical/horizontal
direction. */
UnsizedArrayOf<Offset16To<MathGlyphConstruction>>
glyphConstruction;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.