15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright © 2007,2008,2009 Red Hat, Inc. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright © 2010,2011,2012 Google, Inc. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This is part of HarfBuzz, a text shaping library. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Permission is hereby granted, without written agreement and without 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * license or royalty fees, to use, copy, modify, and distribute this 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * software and its documentation for any purpose, provided that the 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * above copyright notice and the following two paragraphs appear in 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * all copies of this software. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DAMAGE. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Red Hat Author(s): Behdad Esfahbod 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Google Author(s): Behdad Esfahbod 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef HB_OT_LAYOUT_GDEF_TABLE_HH 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_OT_LAYOUT_GDEF_TABLE_HH 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "hb-ot-layout-common-private.hh" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "hb-font-private.hh" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace OT { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Attachment List Table 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ArrayOf<USHORT> AttachPoint; /* Array of contour point indices--in 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * increasing numerical order */ 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct AttachList 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline unsigned int get_attach_points (hb_codepoint_t glyph_id, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int start_offset, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int *point_count /* IN/OUT */, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int *point_array /* OUT */) const 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned int index = (this+coverage).get_coverage (glyph_id); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (index == NOT_COVERED) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (point_count) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *point_count = 0; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const AttachPoint &points = this+attachPoint[index]; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (point_count) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const USHORT *array = points.sub_array (start_offset, point_count); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int count = *point_count; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (unsigned int i = 0; i < count; i++) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) point_array[i] = array[i]; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return points.len; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool sanitize (hb_sanitize_context_t *c) { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_SANITIZE (this); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return TRACE_RETURN (coverage.sanitize (c, this) && attachPoint.sanitize (c, this)); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffsetTo<Coverage> 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) coverage; /* Offset to Coverage table -- from 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * beginning of AttachList table */ 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffsetArrayOf<AttachPoint> 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attachPoint; /* Array of AttachPoint tables 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in Coverage Index order */ 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFINE_SIZE_ARRAY (4, attachPoint); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Ligature Caret Table 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct CaretValueFormat1 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend struct CaretValue; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline hb_position_t get_caret_value (hb_font_t *font, hb_direction_t direction, hb_codepoint_t glyph_id HB_UNUSED) const 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return HB_DIRECTION_IS_HORIZONTAL (direction) ? font->em_scale_x (coordinate) : font->em_scale_y (coordinate); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool sanitize (hb_sanitize_context_t *c) { 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_SANITIZE (this); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return TRACE_RETURN (c->check_struct (this)); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) USHORT caretValueFormat; /* Format identifier--format = 1 */ 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SHORT coordinate; /* X or Y value, in design units */ 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFINE_SIZE_STATIC (4); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct CaretValueFormat2 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend struct CaretValue; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline hb_position_t get_caret_value (hb_font_t *font, hb_direction_t direction, hb_codepoint_t glyph_id) const 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_position_t x, y; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (font->get_glyph_contour_point_for_origin (glyph_id, caretValuePoint, direction, &x, &y)) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return HB_DIRECTION_IS_HORIZONTAL (direction) ? x : y; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool sanitize (hb_sanitize_context_t *c) { 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_SANITIZE (this); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return TRACE_RETURN (c->check_struct (this)); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) USHORT caretValueFormat; /* Format identifier--format = 2 */ 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) USHORT caretValuePoint; /* Contour point index on glyph */ 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFINE_SIZE_STATIC (4); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct CaretValueFormat3 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend struct CaretValue; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline hb_position_t get_caret_value (hb_font_t *font, hb_direction_t direction, hb_codepoint_t glyph_id HB_UNUSED) const 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return HB_DIRECTION_IS_HORIZONTAL (direction) ? 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) font->em_scale_x (coordinate) + (this+deviceTable).get_x_delta (font) : 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) font->em_scale_y (coordinate) + (this+deviceTable).get_y_delta (font); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool sanitize (hb_sanitize_context_t *c) { 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_SANITIZE (this); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return TRACE_RETURN (c->check_struct (this) && deviceTable.sanitize (c, this)); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) USHORT caretValueFormat; /* Format identifier--format = 3 */ 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SHORT coordinate; /* X or Y value, in design units */ 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffsetTo<Device> 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) deviceTable; /* Offset to Device table for X or Y 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * value--from beginning of CaretValue 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * table */ 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFINE_SIZE_STATIC (6); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct CaretValue 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline hb_position_t get_caret_value (hb_font_t *font, hb_direction_t direction, hb_codepoint_t glyph_id) const 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (u.format) { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 1: return u.format1.get_caret_value (font, direction, glyph_id); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 2: return u.format2.get_caret_value (font, direction, glyph_id); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 3: return u.format3.get_caret_value (font, direction, glyph_id); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default:return 0; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool sanitize (hb_sanitize_context_t *c) { 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_SANITIZE (this); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!u.format.sanitize (c)) return TRACE_RETURN (false); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (u.format) { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 1: return TRACE_RETURN (u.format1.sanitize (c)); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 2: return TRACE_RETURN (u.format2.sanitize (c)); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 3: return TRACE_RETURN (u.format3.sanitize (c)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default:return TRACE_RETURN (true); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) union { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) USHORT format; /* Format identifier */ 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CaretValueFormat1 format1; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CaretValueFormat2 format2; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CaretValueFormat3 format3; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } u; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFINE_SIZE_UNION (2, format); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct LigGlyph 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline unsigned int get_lig_carets (hb_font_t *font, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_direction_t direction, 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t glyph_id, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int start_offset, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int *caret_count /* IN/OUT */, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_position_t *caret_array /* OUT */) const 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (caret_count) { 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const OffsetTo<CaretValue> *array = carets.sub_array (start_offset, caret_count); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int count = *caret_count; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (unsigned int i = 0; i < count; i++) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) caret_array[i] = (this+array[i]).get_caret_value (font, direction, glyph_id); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return carets.len; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool sanitize (hb_sanitize_context_t *c) { 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_SANITIZE (this); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return TRACE_RETURN (carets.sanitize (c, this)); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffsetArrayOf<CaretValue> 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) carets; /* Offset array of CaretValue tables 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * --from beginning of LigGlyph table 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * --in increasing coordinate order */ 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFINE_SIZE_ARRAY (2, carets); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct LigCaretList 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline unsigned int get_lig_carets (hb_font_t *font, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_direction_t direction, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t glyph_id, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int start_offset, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int *caret_count /* IN/OUT */, 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_position_t *caret_array /* OUT */) const 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned int index = (this+coverage).get_coverage (glyph_id); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (index == NOT_COVERED) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (caret_count) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *caret_count = 0; 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const LigGlyph &lig_glyph = this+ligGlyph[index]; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return lig_glyph.get_lig_carets (font, direction, glyph_id, start_offset, caret_count, caret_array); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool sanitize (hb_sanitize_context_t *c) { 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_SANITIZE (this); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return TRACE_RETURN (coverage.sanitize (c, this) && ligGlyph.sanitize (c, this)); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffsetTo<Coverage> 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) coverage; /* Offset to Coverage table--from 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * beginning of LigCaretList table */ 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffsetArrayOf<LigGlyph> 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ligGlyph; /* Array of LigGlyph tables 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in Coverage Index order */ 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFINE_SIZE_ARRAY (4, ligGlyph); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct MarkGlyphSetsFormat1 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool covers (unsigned int set_index, hb_codepoint_t glyph_id) const 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { return (this+coverage[set_index]).get_coverage (glyph_id) != NOT_COVERED; } 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool sanitize (hb_sanitize_context_t *c) { 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_SANITIZE (this); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return TRACE_RETURN (coverage.sanitize (c, this)); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) USHORT format; /* Format identifier--format = 1 */ 2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ArrayOf<OffsetTo<Coverage, ULONG> > 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) coverage; /* Array of long offsets to mark set 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * coverage tables */ 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFINE_SIZE_ARRAY (4, coverage); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct MarkGlyphSets 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool covers (unsigned int set_index, hb_codepoint_t glyph_id) const 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (u.format) { 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 1: return u.format1.covers (set_index, glyph_id); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default:return false; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool sanitize (hb_sanitize_context_t *c) { 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_SANITIZE (this); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!u.format.sanitize (c)) return TRACE_RETURN (false); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (u.format) { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 1: return TRACE_RETURN (u.format1.sanitize (c)); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default:return TRACE_RETURN (true); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) union { 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) USHORT format; /* Format identifier */ 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MarkGlyphSetsFormat1 format1; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } u; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFINE_SIZE_UNION (2, format); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * GDEF -- The Glyph Definition Table 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GDEF 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static const hb_tag_t tableTag = HB_OT_TAG_GDEF; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum GlyphClasses { 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnclassifiedGlyph = 0, 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BaseGlyph = 1, 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LigatureGlyph = 2, 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MarkGlyph = 3, 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ComponentGlyph = 4 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool has_glyph_classes (void) const { return glyphClassDef != 0; } 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline unsigned int get_glyph_class (hb_codepoint_t glyph) const 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { return (this+glyphClassDef).get_class (glyph); } 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) inline void get_glyphs_in_class (unsigned int klass, hb_set_t *glyphs) const 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { (this+glyphClassDef).add_class (glyphs, klass); } 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool has_mark_attachment_types (void) const { return markAttachClassDef != 0; } 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline unsigned int get_mark_attachment_type (hb_codepoint_t glyph) const 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { return (this+markAttachClassDef).get_class (glyph); } 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool has_attach_points (void) const { return attachList != 0; } 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline unsigned int get_attach_points (hb_codepoint_t glyph_id, 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int start_offset, 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int *point_count /* IN/OUT */, 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int *point_array /* OUT */) const 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { return (this+attachList).get_attach_points (glyph_id, start_offset, point_count, point_array); } 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool has_lig_carets (void) const { return ligCaretList != 0; } 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline unsigned int get_lig_carets (hb_font_t *font, 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_direction_t direction, 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t glyph_id, 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int start_offset, 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int *caret_count /* IN/OUT */, 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_position_t *caret_array /* OUT */) const 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { return (this+ligCaretList).get_lig_carets (font, direction, glyph_id, start_offset, caret_count, caret_array); } 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) inline bool has_mark_sets (void) const { return version.to_int () >= 0x00010002u && markGlyphSetsDef[0] != 0; } 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool mark_set_covers (unsigned int set_index, hb_codepoint_t glyph_id) const 3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { return version.to_int () >= 0x00010002u && (this+markGlyphSetsDef[0]).covers (set_index, glyph_id); } 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool sanitize (hb_sanitize_context_t *c) { 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_SANITIZE (this); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return TRACE_RETURN (version.sanitize (c) && 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) likely (version.major == 1) && 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) glyphClassDef.sanitize (c, this) && 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attachList.sanitize (c, this) && 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ligCaretList.sanitize (c, this) && 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) markAttachClassDef.sanitize (c, this) && 3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (version.to_int () < 0x00010002u || markGlyphSetsDef[0].sanitize (c, this))); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* glyph_props is a 16-bit integer where the lower 8-bit have bits representing 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * glyph class and other bits, and high 8-bit gthe mark attachment type (if any). 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Not to be confused with lookup_props which is very similar. */ 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline unsigned int get_glyph_props (hb_codepoint_t glyph) const 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int klass = get_glyph_class (glyph); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 386f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_STATIC ((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH == (unsigned int) LookupFlag::IgnoreBaseGlyphs); 387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_STATIC ((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE == (unsigned int) LookupFlag::IgnoreLigatures); 388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_STATIC ((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_MARK == (unsigned int) LookupFlag::IgnoreMarks); 389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (klass) { 391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) default: return 0; 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case BaseGlyph: return HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH; 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case LigatureGlyph: return HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case MarkGlyph: 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) klass = get_mark_attachment_type (glyph); 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return HB_OT_LAYOUT_GLYPH_PROPS_MARK | (klass << 8); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FixedVersion version; /* Version of the GDEF table--currently 4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * 0x00010002u */ 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffsetTo<ClassDef> 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) glyphClassDef; /* Offset to class definition table 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * for glyph type--from beginning of 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * GDEF header (may be Null) */ 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffsetTo<AttachList> 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attachList; /* Offset to list of glyphs with 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * attachment points--from beginning 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of GDEF header (may be Null) */ 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffsetTo<LigCaretList> 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ligCaretList; /* Offset to list of positioning points 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * for ligature carets--from beginning 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of GDEF header (may be Null) */ 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffsetTo<ClassDef> 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) markAttachClassDef; /* Offset to class definition table for 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * mark attachment type--from beginning 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of GDEF header (may be Null) */ 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffsetTo<MarkGlyphSets> 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) markGlyphSetsDef[VAR]; /* Offset to the table of mark set 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * definitions--from beginning of GDEF 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * header (may be NULL). Introduced 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in version 00010002. */ 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFINE_SIZE_ARRAY (12, markGlyphSetsDef); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} /* namespace OT */ 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* HB_OT_LAYOUT_GDEF_TABLE_HH */ 434