186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod/* 286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * Copyright © 2016 Igalia S.L. 386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * 486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * This is part of HarfBuzz, a text shaping library. 586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * 686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * Permission is hereby granted, without written agreement and without 786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this 886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * software and its documentation for any purpose, provided that the 986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * above copyright notice and the following two paragraphs appear in 1086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * all copies of this software. 1186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * 1286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 1386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 1486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 1586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 1686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * DAMAGE. 1786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * 1886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 1986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 2086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 2186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 2286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 2386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * 2486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * Igalia Author(s): Frédéric Wang 2586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod */ 2686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 2786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 2886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod#include "hb-test.h" 2986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 3086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod#include "hb-ft.h" 3186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod#include "hb-ot.h" 3286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 3386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod/* Unit tests for hb-ot-math.h - OpenType MATH table */ 3486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 3586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic FT_Library ft_library; 3686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic FT_Face ft_face; 3786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic hb_font_t *hb_font; 3886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic hb_face_t *hb_face; 3986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 4086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic inline void 4186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad EsfahbodinitFreeType (void) 4286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{ 4386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod FT_Error ft_error; 4486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod if ((ft_error = FT_Init_FreeType (&ft_library))) 4586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod abort(); 4686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod} 4786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 4886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic inline void 4986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad EsfahbodcleanupFreeType (void) 5086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{ 5186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod FT_Done_FreeType (ft_library); 5286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod} 5386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 5486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void 5586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad EsfahbodopenFont(const char* fontFile) 5686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{ 571c98ff87c76536553e53c131e75aba33033ee3a0Mike Hommey#if GLIB_CHECK_VERSION(2,37,2) 5886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod gchar* path = g_test_build_filename(G_TEST_DIST, fontFile, NULL); 591c98ff87c76536553e53c131e75aba33033ee3a0Mike Hommey#else 601c98ff87c76536553e53c131e75aba33033ee3a0Mike Hommey gchar* path = g_strdup(fontFile); 611c98ff87c76536553e53c131e75aba33033ee3a0Mike Hommey#endif 6286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 6386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod FT_Error ft_error; 6486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod if ((ft_error = FT_New_Face (ft_library, path, 0, &ft_face))) { 6586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_free(path); 6686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod abort(); 6786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod } 6886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_free(path); 6986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 70edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang if ((ft_error = FT_Set_Char_Size (ft_face, 2000, 1000, 0, 0))) 7186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod abort(); 7286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_font = hb_ft_font_create (ft_face, NULL); 732f2ceee1853649d1b2ad4315a38cd9c07659932aBehdad Esfahbod hb_face = hb_face_reference (hb_font_get_face (hb_font)); 7486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod} 7586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 7686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic inline void 7786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad EsfahbodcloseFont (void) 7886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{ 792f2ceee1853649d1b2ad4315a38cd9c07659932aBehdad Esfahbod hb_face_destroy (hb_face); 8086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_font_destroy (hb_font); 8186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod FT_Done_Face (ft_face); 82331d07bd40a3d9ff30db5cdf85fdc4f10f0fcb99Behdad Esfahbod hb_face = NULL; 83331d07bd40a3d9ff30db5cdf85fdc4f10f0fcb99Behdad Esfahbod hb_font = NULL; 84331d07bd40a3d9ff30db5cdf85fdc4f10f0fcb99Behdad Esfahbod ft_face = NULL; 8586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod} 8686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 8786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void 8886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodtest_has_data (void) 8986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{ 9086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod initFreeType(); 9186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 9286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontNone.otf"); 9386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(!hb_ot_math_has_data (hb_face)); // MATH table not available 9486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 9586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 9686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontEmpty.otf"); 9786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_ot_math_has_data (hb_face)); // MATH table available 9886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 9986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 100a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod hb_face = hb_face_get_empty (); 101a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod hb_font = hb_font_create (hb_face); 102a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod g_assert(!hb_ot_math_has_data (hb_face)); // MATH table not available 103a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod 104a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod hb_font = hb_font_get_empty (); 105a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod hb_face = hb_font_get_face (hb_font); 106a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod g_assert(!hb_ot_math_has_data (hb_face)); // MATH table not available 107a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod 10886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod cleanupFreeType(); 10986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod} 11086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 11186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void 11286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodtest_get_constant (void) 11386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{ 11486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod initFreeType(); 11586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 11686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontEmpty.otf"); 11786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT), ==, 0); // MathConstants not available 11886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 11986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 12086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontFull.otf"); 12186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT)), ==, 100); 12286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT)), ==, 200); 12386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_MATH_LEADING)), ==, 300); 12486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_AXIS_HEIGHT)), ==, 400); 12586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT)), ==, 500); 12686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT)), ==, 600); 12786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN)), ==, 700); 12886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX)), ==, 800); 12986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN)), ==, 900); 13086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP)), ==, 1100); 13186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED)), ==, 1200); 13286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN)), ==, 1300); 13386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX)), ==, 1400); 13486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN)), ==, 1500); 13586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT)), ==, 1600); 136edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT)), ==, 3400); 13786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN)), ==, 1800); 13886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN)), ==, 1900); 13986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN)), ==, 2200); 14086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN)), ==, 2300); 14186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP)), ==, 2400); 14286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP)), ==, 2500); 14386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN)), ==, 2600); 14486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN)), ==, 2700); 14586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_GAP_MIN)), ==, 2800); 14686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN)), ==, 2900); 14786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP)), ==, 3000); 14886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN)), ==, 3100); 14986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN)), ==, 3200); 15086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN)), ==, 3300); 15186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP)), ==, 3400); 15286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP)), ==, 3500); 15386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN)), ==, 3600); 15486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN)), ==, 3700); 15586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN)), ==, 3800); 15686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN)), ==, 3900); 15786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS)), ==, 4000); 15886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN)), ==, 4100); 15986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN)), ==, 4200); 160edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP)), ==, 8600); 16186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP)), ==, 4400); 16286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP)), ==, 4500); 16386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS)), ==, 4600); 16486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER)), ==, 4700); 16586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP)), ==, 4800); 16686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS)), ==, 4900); 16786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER)), ==, 5000); 16886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP)), ==, 5100); 16986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP)), ==, 5200); 17086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS)), ==, 5300); 17186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER)), ==, 5400); 172edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE)), ==, 11000); 173edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE)), ==, 11200); 17486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN)), ==, 87); 17586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN)), ==, 76); 17686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT)), ==, 65); 17786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 17886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 17986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod cleanupFreeType(); 18086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod} 18186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 18286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void 18386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodtest_get_glyph_italics_correction (void) 18486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{ 18586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_codepoint_t glyph; 18686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod initFreeType(); 18786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 18886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontEmpty.otf"); 18986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 19086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 0); // MathGlyphInfo not available 19186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 19286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 19386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontPartial1.otf"); 19486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 19586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 0); // MathGlyphInfo empty 19686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 19786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 19886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontPartial2.otf"); 19986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 20086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 0); // MathItalicsCorrectionInfo empty 20186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 20286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 20386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontFull.otf"); 20486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 20586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 0); // Glyph without italic correction. 20686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "A", -1, &glyph)); 207edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 394); 20886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "B", -1, &glyph)); 209edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 300); 21086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "C", -1, &glyph)); 211edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 904); 21286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 21386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 21486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod cleanupFreeType(); 21586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod} 21686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 21786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void 21886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodtest_get_glyph_top_accent_attachment (void) 21986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{ 22086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_codepoint_t glyph; 22186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod initFreeType(); 22286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 22386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontEmpty.otf"); 22486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 225edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 1000); // MathGlyphInfo not available 22686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 22786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 22886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontPartial1.otf"); 22986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 230edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 1000); // MathGlyphInfo empty 23186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 23286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 23386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontPartial2.otf"); 23486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 235edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 1000); // MathTopAccentAttachment empty 23686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 23786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 23886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontFull.otf"); 23986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 240edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 1000); // Glyph without top accent attachment. 24186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "D", -1, &glyph)); 242edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 748); 24386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "E", -1, &glyph)); 244edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 692); 24586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "F", -1, &glyph)); 246edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 636); 24786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 24886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 24986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod cleanupFreeType(); 25086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod} 25186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 25286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void 25386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodtest_is_glyph_extended_shape (void) 25486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{ 25586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_codepoint_t glyph; 25686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod initFreeType(); 25786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 25886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontEmpty.otf"); 25986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 26086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(!hb_ot_math_is_glyph_extended_shape (hb_face, glyph)); // MathGlyphInfo not available 26186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 26286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 26386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontPartial1.otf"); 26486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 26586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(!hb_ot_math_is_glyph_extended_shape (hb_face, glyph)); // MathGlyphInfo empty 26686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 26786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 26886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontFull.otf"); 26986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "G", -1, &glyph)); 27086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(!hb_ot_math_is_glyph_extended_shape (hb_face, glyph)); 27186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "H", -1, &glyph)); 27286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_ot_math_is_glyph_extended_shape (hb_face, glyph)); 27386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 27486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 27586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod cleanupFreeType(); 27686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod} 27786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 27886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void 27986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodtest_get_glyph_kerning (void) 28086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{ 28186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_codepoint_t glyph; 28286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod initFreeType(); 28386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 28486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontEmpty.otf"); 28586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 28686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 0), ==, 0); // MathGlyphInfo not available 28786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_LEFT, 0), ==, 0); // MathGlyphInfo not available 28886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_RIGHT, 0), ==, 0); // MathGlyphInfo not available 28986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_LEFT, 0), ==, 0); // MathGlyphInfo not available 29086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 29186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 29286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontPartial2.otf"); 29386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 29486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 0), ==, 0); // MathKernInfo empty 29586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_LEFT, 0), ==, 0); // MathKernInfo empty 29686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_RIGHT, 0), ==, 0); // MathKernInfo empty 29786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_LEFT, 0), ==, 0); // MathKernInfo empty 29886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 29986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 30086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontPartial3.otf"); 30186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 30286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 0), ==, 0); // MathKernInfoRecords empty 30386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_LEFT, 0), ==, 0); // MathKernInfoRecords empty 30486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_RIGHT, 0), ==, 0); // MathKernInfoRecords empty 30586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_LEFT, 0), ==, 0); // MathKernInfoRecords empty 30686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 30786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 30886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontFull.otf"); 30986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "I", -1, &glyph)); 31086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 311edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 7), ==, 62); // lower than min heigth 312edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 14), ==, 62); // equal to min height 313edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 20), ==, 104); 314edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 23), ==, 104); 315edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 31), ==, 146); 316edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 32), ==, 146); 317edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 86), ==, 398); // equal to max height 318edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 91), ==, 440); // larger than max height 319edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 96), ==, 440); // larger than max height 320edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang 321edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 39), ==, 188); // top right 322edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_LEFT, 39), ==, 110); // top left 323edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_RIGHT, 39), ==, 44); // bottom right 324edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_LEFT, 39), ==, 100); // bottom left 32586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 32686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 32786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 32886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod cleanupFreeType(); 32986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod} 33086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 33186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 332cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbodstatic hb_position_t 333cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbodget_glyph_assembly_italics_correction (hb_font_t *font, 334cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod hb_codepoint_t glyph, 335cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod hb_bool_t horizontal) 336cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod{ 337cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod hb_position_t corr; 338cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod hb_ot_math_get_glyph_assembly (font, glyph, 339cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod horizontal ? HB_DIRECTION_LTR : HB_DIRECTION_TTB, 340a5629a2ed9c2e69f2b4ebb74d85fbe0b5ba2be67Behdad Esfahbod 0, NULL, NULL, 341cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod &corr); 342cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod return corr; 343cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod} 344cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod 345485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wangstatic void 346cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbodtest_get_glyph_assembly_italics_correction (void) 34786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{ 34886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_codepoint_t glyph; 34986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod initFreeType(); 35086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 35186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontEmpty.otf"); 35286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 353cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 0); // MathVariants not available 354cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 0); // MathVariants not available 35586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 35686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 35786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontPartial1.otf"); 35886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 359cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 0); // VertGlyphCoverage and HorizGlyphCoverage absent 360cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 0); // VertGlyphCoverage and HorizGlyphCoverage absent 36186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 36286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 36386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontPartial2.otf"); 36486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 365cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 0); // VertGlyphCoverage and HorizGlyphCoverage empty 366cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 0); // VertGlyphCoverage and HorizGlyphCoverage empty 36786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 36886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 36986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontPartial3.otf"); 37086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 371cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 0); // HorizGlyphConstruction and VertGlyphConstruction empty 372cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 0); // HorizGlyphConstruction and VertGlyphConstruction empty 37386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 37486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 37586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontPartial4.otf"); 37686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 377cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 0); 378cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 0); 37986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 38086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 38186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod openFont("fonts/MathTestFontFull.otf"); 38286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "arrowleft", -1, &glyph)); 383edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 248); 384cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 0); 38586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod g_assert(hb_font_get_glyph_from_name (hb_font, "arrowup", -1, &glyph)); 386cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 0); 387edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 662); 388edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang closeFont(); 389edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang 390edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang cleanupFreeType(); 391edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang} 392edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang 393485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wangstatic void 394edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wangtest_get_min_connector_overlap (void) 395edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang{ 396edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang initFreeType(); 397edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang 398edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang openFont("fonts/MathTestFontEmpty.otf"); 399edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_min_connector_overlap(hb_font, FALSE), ==, 0); // MathVariants not available 400edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_min_connector_overlap(hb_font, TRUE), ==, 0); // MathVariants not available 401edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang closeFont(); 402edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang 403edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang openFont("fonts/MathTestFontPartial1.otf"); 404edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_min_connector_overlap(hb_font, HB_DIRECTION_LTR), ==, 108); 405edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang g_assert_cmpint(hb_ot_math_get_min_connector_overlap(hb_font, HB_DIRECTION_TTB), ==, 54); 40686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod closeFont(); 40786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 40886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod cleanupFreeType(); 40986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod} 41086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 411485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wangstatic void 412485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wangtest_get_glyph_variants (void) 413485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang{ 414485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang hb_codepoint_t glyph; 415b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod hb_ot_math_glyph_variant_t variants[20]; 416b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod unsigned variantsSize = sizeof (variants) / sizeof (variants[0]); 417b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod unsigned int count; 418b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod unsigned int offset = 0; 419b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod 420485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang initFreeType(); 421485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 422485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang openFont("fonts/MathTestFontEmpty.otf"); 423485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 424485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL), ==, 0); 425485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL), ==, 0); 426485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang closeFont(); 427485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 428485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang openFont("fonts/MathTestFontPartial1.otf"); 429485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 430485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL), ==, 0); 431485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL), ==, 0); 432485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang closeFont(); 433485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 434485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang openFont("fonts/MathTestFontPartial2.otf"); 435485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 436485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL), ==, 0); 437485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL), ==, 0); 438485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang closeFont(); 439485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 440485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang openFont("fonts/MathTestFontPartial3.otf"); 441485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 442485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL), ==, 0); 443485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL), ==, 0); 444485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang closeFont(); 445485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 446485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang openFont("fonts/MathTestFontPartial4.otf"); 447485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 448485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL), ==, 0); 449485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL), ==, 0); 450485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang closeFont(); 451485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 452485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang openFont("fonts/MathTestFontFull.otf"); 453485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 454485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "arrowleft", -1, &glyph)); 455485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, 456485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang glyph, 457485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang HB_DIRECTION_BTT, 458485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 0, 459485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang NULL, 460485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang NULL), ==, 0); 461485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, 462485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang glyph, 463485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang HB_DIRECTION_RTL, 464485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 0, 465485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang NULL, 466485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang NULL), ==, 3); 467485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 468485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "arrowup", -1, &glyph)); 469485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, 470485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang glyph, 471485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang HB_DIRECTION_BTT, 472485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 0, 473485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang NULL, 474485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang NULL), ==, 4); 475485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, 476485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang glyph, 477485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang HB_DIRECTION_RTL, 478485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 0, 479485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang NULL, 480485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang NULL), ==, 0); 481485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 482485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "arrowleft", -1, &glyph)); 483485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang do { 484485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang count = variantsSize; 485485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang hb_ot_math_get_glyph_variants (hb_font, 486485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang glyph, 487485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang HB_DIRECTION_RTL, 488485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang offset, 489485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang &count, 490485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang variants); 491485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang offset += count; 492485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang } while (count == variantsSize); 493485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(offset, ==, 3); 494485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "uni2190_size2", -1, &glyph)); 495485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[0].glyph, ==, glyph); 496485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[0].advance, ==, 4302); 497485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "uni2190_size3", -1, &glyph)); 498485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[1].glyph, ==, glyph); 499485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[1].advance, ==, 4802); 500485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "uni2190_size4", -1, &glyph)); 501485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[2].glyph, ==, glyph); 502485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[2].advance, ==, 5802); 503485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 504485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "arrowup", -1, &glyph)); 505485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang offset = 0; 506485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang do { 507485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang count = variantsSize; 508485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang hb_ot_math_get_glyph_variants (hb_font, 509485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang glyph, 510485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang HB_DIRECTION_BTT, 511485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang offset, 512485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang &count, 513485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang variants); 514485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang offset += count; 515485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang } while (count == variantsSize); 516485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(offset, ==, 4); 517485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "uni2191_size2", -1, &glyph)); 518485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[0].glyph, ==, glyph); 519485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[0].advance, ==, 2251); 520485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "uni2191_size3", -1, &glyph)); 521485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[1].glyph, ==, glyph); 522485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[1].advance, ==, 2501); 523485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "uni2191_size4", -1, &glyph)); 524485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[2].glyph, ==, glyph); 525485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[2].advance, ==, 3001); 526485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "uni2191_size5", -1, &glyph)); 527485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[3].glyph, ==, glyph); 528485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang g_assert_cmpint(variants[3].advance, ==, 3751); 529485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 530485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang closeFont(); 531485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 532485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang cleanupFreeType(); 533485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang} 534485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang 5358d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wangstatic void 5368d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wangtest_get_glyph_assembly (void) 5378d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang{ 5388d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang hb_codepoint_t glyph; 539b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod hb_ot_math_glyph_part_t parts[20]; 540b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod unsigned partsSize = sizeof (parts) / sizeof (parts[0]); 541b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod unsigned int count; 542b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod unsigned int offset = 0; 543b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod 5448d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang initFreeType(); 5458d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 5468d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang openFont("fonts/MathTestFontEmpty.otf"); 5478d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 5488d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL, NULL), ==, 0); 5498d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL, NULL), ==, 0); 5508d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang closeFont(); 5518d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 5528d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang openFont("fonts/MathTestFontPartial1.otf"); 5538d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 5548d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL, NULL), ==, 0); 5558d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL, NULL), ==, 0); 5568d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang closeFont(); 5578d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 5588d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang openFont("fonts/MathTestFontPartial2.otf"); 5598d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 5608d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL, NULL), ==, 0); 5618d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL, NULL), ==, 0); 5628d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang closeFont(); 5638d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 5648d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang openFont("fonts/MathTestFontPartial3.otf"); 5658d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 5668d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL, NULL), ==, 0); 5678d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL, NULL), ==, 0); 5688d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang closeFont(); 5698d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 5708d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang openFont("fonts/MathTestFontPartial4.otf"); 5718d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph)); 5728d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL, NULL), ==, 0); 5738d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL, NULL), ==, 0); 5748d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang closeFont(); 5758d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 5768d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang openFont("fonts/MathTestFontFull.otf"); 5778d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 5788d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "arrowright", -1, &glyph)); 5798d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, 5808d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang glyph, 5818d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang HB_DIRECTION_BTT, 5828d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 0, 5838d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL, 5848d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL, 5858d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL), ==, 0); 5868d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, 5878d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang glyph, 5888d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang HB_DIRECTION_RTL, 5898d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 0, 5908d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL, 5918d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL, 5928d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL), ==, 3); 5938d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 5948d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "arrowdown", -1, &glyph)); 5958d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, 5968d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang glyph, 5978d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang HB_DIRECTION_BTT, 5988d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 0, 5998d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL, 6008d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL, 6018d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL), ==, 5); 6028d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, 6038d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang glyph, 6048d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang HB_DIRECTION_RTL, 6058d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 0, 6068d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL, 6078d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL, 6088d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL), ==, 0); 6098d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 6108d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "arrowright", -1, &glyph)); 6118d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang do { 6128d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang count = partsSize; 6138d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang hb_ot_math_get_glyph_assembly (hb_font, 6148d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang glyph, 6158d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang HB_DIRECTION_RTL, 6168d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang offset, 6178d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang &count, 6188d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang parts, 6198d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL); 6208d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang offset += count; 6218d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang } while (count == partsSize); 6228d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(offset, ==, 3); 6238d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "left", -1, &glyph)); 6248d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[0].glyph, ==, glyph); 6258d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[0].start_connector_length, ==, 800); 6268d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[0].end_connector_length, ==, 384); 6278d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[0].full_advance, ==, 2000); 6288d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(!(parts[0].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER)); 6298d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "horizontal", -1, &glyph)); 6308d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[1].glyph, ==, glyph); 6318d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[1].start_connector_length, ==, 524); 6328d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[1].end_connector_length, ==, 800); 6338d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[1].full_advance, ==, 2000); 6348d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(parts[1].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER); 6358d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "right", -1, &glyph)); 6368d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[2].glyph, ==, glyph); 6378d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[2].start_connector_length, ==, 316); 6388d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[2].end_connector_length, ==, 454); 6398d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[2].full_advance, ==, 2000); 6408d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(!(parts[2].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER)); 6418d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 6428d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "arrowdown", -1, &glyph)); 6438d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang offset = 0; 6448d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang do { 6458d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang count = partsSize; 6468d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang hb_ot_math_get_glyph_assembly (hb_font, 6478d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang glyph, 6488d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang HB_DIRECTION_BTT, 6498d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang offset, 6508d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang &count, 6518d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang parts, 6528d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang NULL); 6538d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang offset += count; 6548d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang } while (count == partsSize); 6558d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(offset, ==, 5); 6568d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "bottom", -1, &glyph)); 6578d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[0].glyph, ==, glyph); 6588d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[0].start_connector_length, ==, 365); 6598d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[0].end_connector_length, ==, 158); 6608d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[0].full_advance, ==, 1000); 6618d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(!(parts[0].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER)); 6628d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "vertical", -1, &glyph)); 6638d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[1].glyph, ==, glyph); 6648d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[1].glyph, ==, glyph); 6658d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[1].start_connector_length, ==, 227); 6668d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[1].end_connector_length, ==, 365); 6678d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[1].full_advance, ==, 1000); 6688d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(parts[1].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER); 6698d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "center", -1, &glyph)); 6708d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[2].glyph, ==, glyph); 6718d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[2].start_connector_length, ==, 54); 6728d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[2].end_connector_length, ==, 158); 6738d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[2].full_advance, ==, 1000); 6748d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(!(parts[2].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER)); 6758d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "vertical", -1, &glyph)); 6768d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[3].glyph, ==, glyph); 6778d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[3].glyph, ==, glyph); 6788d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[3].glyph, ==, glyph); 6798d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[3].start_connector_length, ==, 400); 6808d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[3].end_connector_length, ==, 296); 6818d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[3].full_advance, ==, 1000); 6828d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(parts[1].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER); 6838d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(hb_font_get_glyph_from_name (hb_font, "top", -1, &glyph)); 6848d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[4].glyph, ==, glyph); 6858d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[4].start_connector_length, ==, 123); 6868d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[4].end_connector_length, ==, 192); 6878d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert_cmpint(parts[4].full_advance, ==, 1000); 6888d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang g_assert(!(parts[4].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER)); 6898d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 6908d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang closeFont(); 6918d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 6928d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang cleanupFreeType(); 6938d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang} 6948d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang 69586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodint 69686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodmain (int argc, char **argv) 69786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{ 69886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_test_init (&argc, &argv); 69986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 70086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_test_add (test_has_data); 70186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_test_add (test_get_constant); 70286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_test_add (test_get_glyph_italics_correction); 70386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_test_add (test_get_glyph_top_accent_attachment); 70486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_test_add (test_is_glyph_extended_shape); 70586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod hb_test_add (test_get_glyph_kerning); 706cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod hb_test_add (test_get_glyph_assembly_italics_correction); 707edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang hb_test_add (test_get_min_connector_overlap); 708485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang hb_test_add (test_get_glyph_variants); 7098d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang hb_test_add (test_get_glyph_assembly); 71086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod 71186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod return hb_test_run(); 71286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod} 713