MATH Table: Add API to access math contants.
This commit is contained in:
parent
4d3892e9b0
commit
319ff59161
@ -112,6 +112,7 @@ HB_OT_headers = \
|
|||||||
hb-ot.h \
|
hb-ot.h \
|
||||||
hb-ot-font.h \
|
hb-ot-font.h \
|
||||||
hb-ot-layout.h \
|
hb-ot-layout.h \
|
||||||
|
hb-ot-math.h \
|
||||||
hb-ot-shape.h \
|
hb-ot-shape.h \
|
||||||
hb-ot-tag.h \
|
hb-ot-tag.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
@ -29,9 +29,139 @@
|
|||||||
|
|
||||||
#include "hb-open-type-private.hh"
|
#include "hb-open-type-private.hh"
|
||||||
#include "hb-ot-layout-common-private.hh"
|
#include "hb-ot-layout-common-private.hh"
|
||||||
|
#include "hb-ot-math.h"
|
||||||
|
|
||||||
namespace OT {
|
namespace OT {
|
||||||
|
|
||||||
|
|
||||||
|
struct MathValueRecord
|
||||||
|
{
|
||||||
|
inline hb_position_t get_value (hb_font_t *font, bool horizontal,
|
||||||
|
const void *base) const
|
||||||
|
{
|
||||||
|
return horizontal ?
|
||||||
|
font->em_scale_x (value) + (base+deviceTable).get_x_delta (font) :
|
||||||
|
font->em_scale_y (value) + (base+deviceTable).get_y_delta (font);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
|
||||||
|
{
|
||||||
|
TRACE_SANITIZE (this);
|
||||||
|
return_trace (c->check_struct (this) && deviceTable.sanitize (c, base));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
SHORT value; /* The X or Y value in design units */
|
||||||
|
OffsetTo<Device> deviceTable; /* Offset to the device table - from the
|
||||||
|
beginning of parent table. May be NULL.
|
||||||
|
Suggested format for device table is 1. */
|
||||||
|
|
||||||
|
public:
|
||||||
|
DEFINE_SIZE_STATIC (2 * 2);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MathConstants
|
||||||
|
{
|
||||||
|
inline bool sanitize_math_value_records (hb_sanitize_context_t *c) const
|
||||||
|
{
|
||||||
|
TRACE_SANITIZE (this);
|
||||||
|
unsigned int count =
|
||||||
|
HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE -
|
||||||
|
HB_OT_MATH_CONSTANT_MATH_LEADING + 1;
|
||||||
|
for (unsigned int i = 0; i < count; i++)
|
||||||
|
if (!mathValueRecords[i].sanitize (c, this)) return_trace (false);
|
||||||
|
return_trace (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool sanitize (hb_sanitize_context_t *c) const
|
||||||
|
{
|
||||||
|
TRACE_SANITIZE (this);
|
||||||
|
return_trace (c->check_struct (this) && sanitize_math_value_records(c));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline hb_position_t get_value (hb_font_t *font, hb_ot_math_constant_t constant) const
|
||||||
|
{
|
||||||
|
switch (constant) {
|
||||||
|
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_value(font, true, 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_value(font, false, this);
|
||||||
|
|
||||||
|
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_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT:
|
||||||
|
return radicalDegreeBottomRaisePercent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
SHORT percentScaleDown[HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN - HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN + 1];
|
||||||
|
USHORT minHeight[HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT - HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT + 1];
|
||||||
|
MathValueRecord mathValueRecords[HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE - HB_OT_MATH_CONSTANT_MATH_LEADING + 1];
|
||||||
|
SHORT radicalDegreeBottomRaisePercent;
|
||||||
|
|
||||||
|
public:
|
||||||
|
DEFINE_SIZE_STATIC (2 * (HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT - HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN + 1) +
|
||||||
|
4 * (HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE - HB_OT_MATH_CONSTANT_MATH_LEADING + 1) +
|
||||||
|
2);
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MATH -- The MATH Table
|
* MATH -- The MATH Table
|
||||||
*/
|
*/
|
||||||
@ -44,14 +174,22 @@ struct MATH
|
|||||||
{
|
{
|
||||||
TRACE_SANITIZE (this);
|
TRACE_SANITIZE (this);
|
||||||
return_trace (version.sanitize (c) &&
|
return_trace (version.sanitize (c) &&
|
||||||
likely (version.major == 1));
|
likely (version.major == 1) &&
|
||||||
|
mathConstants.sanitize (c, this));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool has_math_constants (void) const { return mathConstants != 0; }
|
||||||
|
inline const MathConstants &get_math_constants (void) const {
|
||||||
|
return this+mathConstants;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
FixedVersion<>version; /* Version of the MATH table
|
FixedVersion<>version; /* Version of the MATH table
|
||||||
* initially set to 0x00010000u */
|
* initially set to 0x00010000u */
|
||||||
|
OffsetTo<MathConstants> mathConstants; /* MathConstants table */
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DEFINE_SIZE_STATIC (4);
|
DEFINE_SIZE_STATIC (6);
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* mathspace OT */
|
} /* mathspace OT */
|
||||||
|
@ -1244,3 +1244,28 @@ hb_ot_layout_has_math_data (hb_face_t *face)
|
|||||||
{
|
{
|
||||||
return &_get_math (face) != &OT::Null(OT::MATH);
|
return &_get_math (face) != &OT::Null(OT::MATH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hb_ot_layout_get_math_constant:
|
||||||
|
*
|
||||||
|
* @font: #hb_font_t from which to retrieve the value
|
||||||
|
* @constant: #hb_ot_math_constant_t the constant to retrieve
|
||||||
|
*
|
||||||
|
* This function returns the requested math constants as a #hb_position_t.
|
||||||
|
* If the request constant is HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN,
|
||||||
|
* HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN or
|
||||||
|
* HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN then the return value is
|
||||||
|
* actually an integer between 0 and 100 representing that percentage.
|
||||||
|
*
|
||||||
|
* Return value: the requested constant or 0
|
||||||
|
*
|
||||||
|
* Since: ????
|
||||||
|
**/
|
||||||
|
hb_position_t
|
||||||
|
hb_ot_layout_get_math_constant (hb_font_t *font,
|
||||||
|
hb_ot_math_constant_t constant)
|
||||||
|
{
|
||||||
|
const OT::MATH &math = _get_math (font->face);
|
||||||
|
return math.has_math_constants() ?
|
||||||
|
math.get_math_constants().get_value(font, constant) : 0;
|
||||||
|
}
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
#include "hb.h"
|
#include "hb.h"
|
||||||
|
|
||||||
|
#include "hb-ot-math.h"
|
||||||
#include "hb-ot-tag.h"
|
#include "hb-ot-tag.h"
|
||||||
|
|
||||||
HB_BEGIN_DECLS
|
HB_BEGIN_DECLS
|
||||||
@ -305,6 +306,10 @@ hb_ot_layout_get_size_params (hb_face_t *face,
|
|||||||
HB_EXTERN hb_bool_t
|
HB_EXTERN hb_bool_t
|
||||||
hb_ot_layout_has_math_data (hb_face_t *face);
|
hb_ot_layout_has_math_data (hb_face_t *face);
|
||||||
|
|
||||||
|
HB_EXTERN hb_position_t
|
||||||
|
hb_ot_layout_get_math_constant (hb_font_t *font,
|
||||||
|
hb_ot_math_constant_t constant);
|
||||||
|
|
||||||
|
|
||||||
HB_END_DECLS
|
HB_END_DECLS
|
||||||
|
|
||||||
|
100
src/hb-ot-math.h
Normal file
100
src/hb-ot-math.h
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Copyright © 2016 Igalia S.L.
|
||||||
|
*
|
||||||
|
* This is part of HarfBuzz, a text shaping library.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, without written agreement and without
|
||||||
|
* license or royalty fees, to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose, provided that the
|
||||||
|
* above copyright notice and the following two paragraphs appear in
|
||||||
|
* all copies of this software.
|
||||||
|
*
|
||||||
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
|
||||||
|
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
|
||||||
|
* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
|
* DAMAGE.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
|
||||||
|
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
|
||||||
|
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
||||||
|
*
|
||||||
|
* Igalia Author(s): Frédéric Wang
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HB_OT_H_IN
|
||||||
|
#error "Include <hb-ot.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HB_OT_MATH_H
|
||||||
|
#define HB_OT_MATH_H
|
||||||
|
|
||||||
|
#include "hb.h"
|
||||||
|
|
||||||
|
HB_BEGIN_DECLS
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN = 0,
|
||||||
|
HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN = 1,
|
||||||
|
HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT = 2,
|
||||||
|
HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT = 3,
|
||||||
|
HB_OT_MATH_CONSTANT_MATH_LEADING = 4,
|
||||||
|
HB_OT_MATH_CONSTANT_AXIS_HEIGHT = 5,
|
||||||
|
HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT = 6,
|
||||||
|
HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT = 7,
|
||||||
|
HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN = 8,
|
||||||
|
HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX = 9,
|
||||||
|
HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN = 10,
|
||||||
|
HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP = 11,
|
||||||
|
HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED = 12,
|
||||||
|
HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN = 13,
|
||||||
|
HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX = 14,
|
||||||
|
HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN = 15,
|
||||||
|
HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT = 16,
|
||||||
|
HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT = 17,
|
||||||
|
HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN = 18,
|
||||||
|
HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN = 19,
|
||||||
|
HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN = 20,
|
||||||
|
HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN = 21,
|
||||||
|
HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP = 22,
|
||||||
|
HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP = 23,
|
||||||
|
HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN = 24,
|
||||||
|
HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN = 25,
|
||||||
|
HB_OT_MATH_CONSTANT_STACK_GAP_MIN = 26,
|
||||||
|
HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN = 27,
|
||||||
|
HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP = 28,
|
||||||
|
HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN = 29,
|
||||||
|
HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN = 30,
|
||||||
|
HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN = 31,
|
||||||
|
HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP = 32,
|
||||||
|
HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP = 33,
|
||||||
|
HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN = 34,
|
||||||
|
HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN = 35,
|
||||||
|
HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN = 36,
|
||||||
|
HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN = 37,
|
||||||
|
HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS = 38,
|
||||||
|
HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN = 39,
|
||||||
|
HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN = 40,
|
||||||
|
HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP = 41,
|
||||||
|
HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP = 42,
|
||||||
|
HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP = 43,
|
||||||
|
HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS = 44,
|
||||||
|
HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER = 45,
|
||||||
|
HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP = 46,
|
||||||
|
HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS = 47,
|
||||||
|
HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER = 48,
|
||||||
|
HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP = 49,
|
||||||
|
HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP = 50,
|
||||||
|
HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS = 51,
|
||||||
|
HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER = 52,
|
||||||
|
HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE = 53,
|
||||||
|
HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE = 54,
|
||||||
|
HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT = 55
|
||||||
|
} hb_ot_math_constant_t;
|
||||||
|
|
||||||
|
HB_END_DECLS
|
||||||
|
|
||||||
|
#endif /* HB_OT_MATH_H */
|
BIN
test/api/fonts/MathTestFontFull.otf
Normal file
BIN
test/api/fonts/MathTestFontFull.otf
Normal file
Binary file not shown.
@ -89,12 +89,84 @@ test_has_math_data (void)
|
|||||||
cleanupFreeType();
|
cleanupFreeType();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_get_math_constant (void)
|
||||||
|
{
|
||||||
|
initFreeType();
|
||||||
|
|
||||||
|
openFont("fonts/MathTestFontEmpty.otf");
|
||||||
|
g_assert_cmpint(hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT), ==, 0); // MathConstants not available
|
||||||
|
closeFont();
|
||||||
|
|
||||||
|
openFont("fonts/MathTestFontFull.otf");
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT)), ==, 100);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT)), ==, 200);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_MATH_LEADING)), ==, 300);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_AXIS_HEIGHT)), ==, 400);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT)), ==, 500);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT)), ==, 600);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN)), ==, 700);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX)), ==, 800);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN)), ==, 900);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP)), ==, 1100);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED)), ==, 1200);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN)), ==, 1300);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX)), ==, 1400);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN)), ==, 1500);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT)), ==, 1600);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT)), ==, 1700);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN)), ==, 1800);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN)), ==, 1900);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN)), ==, 2200);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN)), ==, 2300);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP)), ==, 2400);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP)), ==, 2500);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN)), ==, 2600);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN)), ==, 2700);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_GAP_MIN)), ==, 2800);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN)), ==, 2900);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP)), ==, 3000);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN)), ==, 3100);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN)), ==, 3200);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN)), ==, 3300);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP)), ==, 3400);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP)), ==, 3500);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN)), ==, 3600);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN)), ==, 3700);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN)), ==, 3800);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN)), ==, 3900);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS)), ==, 4000);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN)), ==, 4100);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN)), ==, 4200);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP)), ==, 4300);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP)), ==, 4400);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP)), ==, 4500);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS)), ==, 4600);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER)), ==, 4700);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP)), ==, 4800);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS)), ==, 4900);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER)), ==, 5000);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP)), ==, 5100);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP)), ==, 5200);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS)), ==, 5300);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER)), ==, 5400);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE)), ==, 5500);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE)), ==, 5600);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN)), ==, 87);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN)), ==, 76);
|
||||||
|
g_assert_cmpint((hb_ot_layout_get_math_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT)), ==, 65);
|
||||||
|
closeFont();
|
||||||
|
|
||||||
|
cleanupFreeType();
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
hb_test_init (&argc, &argv);
|
hb_test_init (&argc, &argv);
|
||||||
|
|
||||||
hb_test_add (test_has_math_data);
|
hb_test_add (test_has_math_data);
|
||||||
|
hb_test_add (test_get_math_constant);
|
||||||
|
|
||||||
return hb_test_run();
|
return hb_test_run();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user