16c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod/* 26c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * Copyright © 2013 Google, Inc. 36c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * 46c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * This is part of HarfBuzz, a text shaping library. 56c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * 66c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * Permission is hereby granted, without written agreement and without 76c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this 86c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * software and its documentation for any purpose, provided that the 96c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * above copyright notice and the following two paragraphs appear in 106c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * all copies of this software. 116c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * 126c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 136c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 146c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 156c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 166c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * DAMAGE. 176c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * 186c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 196c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 206c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 216c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 226c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 236c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * 246c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * Google Author(s): Behdad Esfahbod 256c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod */ 266c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 276c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod#ifndef HB_OT_LAYOUT_JSTF_TABLE_HH 286c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod#define HB_OT_LAYOUT_JSTF_TABLE_HH 296c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 306c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod#include "hb-open-type-private.hh" 316c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod#include "hb-ot-layout-gpos-table.hh" 326c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 336c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 346c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbodnamespace OT { 356c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 366c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 376c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod/* 386c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfModList -- Justification Modification List Tables 396c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod */ 406c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 416c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbodtypedef IndexArray JstfModList; 426c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 436c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 446c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod/* 456c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfMax -- Justification Maximum Table 466c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod */ 476c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 486c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbodtypedef OffsetListOf<PosLookup> JstfMax; 496c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 506c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 516c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod/* 526c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfPriority -- Justification Priority Table 536c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod */ 546c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 556c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbodstruct JstfPriority 566c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod{ 57de2118ed7a998a1df9b28fd1be96b4af89ed82c3Behdad Esfahbod inline bool sanitize (hb_sanitize_context_t *c) const 58de2118ed7a998a1df9b28fd1be96b4af89ed82c3Behdad Esfahbod { 596c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod TRACE_SANITIZE (this); 60b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod return_trace (c->check_struct (this) && 61b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod shrinkageEnableGSUB.sanitize (c, this) && 62b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod shrinkageDisableGSUB.sanitize (c, this) && 63b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod shrinkageEnableGPOS.sanitize (c, this) && 64b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod shrinkageDisableGPOS.sanitize (c, this) && 65b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod shrinkageJstfMax.sanitize (c, this) && 66b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod extensionEnableGSUB.sanitize (c, this) && 67b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod extensionDisableGSUB.sanitize (c, this) && 68b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod extensionEnableGPOS.sanitize (c, this) && 69b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod extensionDisableGPOS.sanitize (c, this) && 70b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod extensionJstfMax.sanitize (c, this)); 716c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod } 726c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 736c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod protected: 746c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod OffsetTo<JstfModList> 756c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod shrinkageEnableGSUB; /* Offset to Shrinkage Enable GSUB 766c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfModList table--from beginning of 776c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfPriority table--may be NULL */ 786c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod OffsetTo<JstfModList> 796c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod shrinkageDisableGSUB; /* Offset to Shrinkage Disable GSUB 806c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfModList table--from beginning of 816c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfPriority table--may be NULL */ 826c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod OffsetTo<JstfModList> 836c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod shrinkageEnableGPOS; /* Offset to Shrinkage Enable GPOS 846c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfModList table--from beginning of 856c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfPriority table--may be NULL */ 866c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod OffsetTo<JstfModList> 876c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod shrinkageDisableGPOS; /* Offset to Shrinkage Disable GPOS 886c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfModList table--from beginning of 896c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfPriority table--may be NULL */ 906c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod OffsetTo<JstfMax> 916c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod shrinkageJstfMax; /* Offset to Shrinkage JstfMax table-- 926c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * from beginning of JstfPriority table 936c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * --may be NULL */ 946c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod OffsetTo<JstfModList> 956c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod extensionEnableGSUB; /* Offset to Extension Enable GSUB 966c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfModList table--from beginning of 976c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfPriority table--may be NULL */ 986c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod OffsetTo<JstfModList> 996c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod extensionDisableGSUB; /* Offset to Extension Disable GSUB 1006c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfModList table--from beginning of 1016c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfPriority table--may be NULL */ 1026c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod OffsetTo<JstfModList> 1036c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod extensionEnableGPOS; /* Offset to Extension Enable GPOS 1046c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfModList table--from beginning of 1056c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfPriority table--may be NULL */ 1066c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod OffsetTo<JstfModList> 1076c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod extensionDisableGPOS; /* Offset to Extension Disable GPOS 1086c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfModList table--from beginning of 1096c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfPriority table--may be NULL */ 1106c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod OffsetTo<JstfMax> 1116c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod extensionJstfMax; /* Offset to Extension JstfMax table-- 1126c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * from beginning of JstfPriority table 1136c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * --may be NULL */ 1146c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1156c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod public: 1166c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod DEFINE_SIZE_STATIC (20); 1176c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod}; 1186c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1196c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1206c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod/* 1216c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfLangSys -- Justification Language System Table 1226c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod */ 1236c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1246c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbodstruct JstfLangSys : OffsetListOf<JstfPriority> 1256c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod{ 1266c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline bool sanitize (hb_sanitize_context_t *c, 127de2118ed7a998a1df9b28fd1be96b4af89ed82c3Behdad Esfahbod const Record<JstfLangSys>::sanitize_closure_t * = NULL) const 128de2118ed7a998a1df9b28fd1be96b4af89ed82c3Behdad Esfahbod { 1296c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod TRACE_SANITIZE (this); 130b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod return_trace (OffsetListOf<JstfPriority>::sanitize (c)); 1316c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod } 1326c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod}; 1336c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1346c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1356c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod/* 1366c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * ExtenderGlyphs -- Extender Glyph Table 1376c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod */ 1386c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1396c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbodtypedef SortedArrayOf<GlyphID> ExtenderGlyphs; 1406c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1416c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1426c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod/* 1436c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JstfScript -- The Justification Table 1446c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod */ 1456c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1466c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbodstruct JstfScript 1476c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod{ 1486c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline unsigned int get_lang_sys_count (void) const 1496c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod { return langSys.len; } 1506c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline const Tag& get_lang_sys_tag (unsigned int i) const 1516c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod { return langSys.get_tag (i); } 1526c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline unsigned int get_lang_sys_tags (unsigned int start_offset, 1536c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod unsigned int *lang_sys_count /* IN/OUT */, 1546c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod hb_tag_t *lang_sys_tags /* OUT */) const 1556c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod { return langSys.get_tags (start_offset, lang_sys_count, lang_sys_tags); } 1566c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline const JstfLangSys& get_lang_sys (unsigned int i) const 1576c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod { 1586c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod if (i == Index::NOT_FOUND_INDEX) return get_default_lang_sys (); 1596c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod return this+langSys[i].offset; 1606c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod } 1616c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline bool find_lang_sys_index (hb_tag_t tag, unsigned int *index) const 1626c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod { return langSys.find_index (tag, index); } 1636c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1646c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline bool has_default_lang_sys (void) const { return defaultLangSys != 0; } 1656c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline const JstfLangSys& get_default_lang_sys (void) const { return this+defaultLangSys; } 1666c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1676c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline bool sanitize (hb_sanitize_context_t *c, 168de2118ed7a998a1df9b28fd1be96b4af89ed82c3Behdad Esfahbod const Record<JstfScript>::sanitize_closure_t * = NULL) const 169de2118ed7a998a1df9b28fd1be96b4af89ed82c3Behdad Esfahbod { 1706c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod TRACE_SANITIZE (this); 171b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod return_trace (extenderGlyphs.sanitize (c, this) && 172b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod defaultLangSys.sanitize (c, this) && 173b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod langSys.sanitize (c, this)); 1746c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod } 1756c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1766c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod protected: 1776c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod OffsetTo<ExtenderGlyphs> 1786c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod extenderGlyphs; /* Offset to ExtenderGlyph table--from beginning 1796c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * of JstfScript table-may be NULL */ 1806c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod OffsetTo<JstfLangSys> 1816c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod defaultLangSys; /* Offset to DefaultJstfLangSys table--from 1826c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * beginning of JstfScript table--may be Null */ 1836c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod RecordArrayOf<JstfLangSys> 1846c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod langSys; /* Array of JstfLangSysRecords--listed 1856c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * alphabetically by LangSysTag */ 1866c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod public: 1876c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod DEFINE_SIZE_ARRAY (6, langSys); 1886c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod}; 1896c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1906c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1916c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod/* 1926c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * JSTF -- The Justification Table 1936c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod */ 1946c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1956c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbodstruct JSTF 1966c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod{ 1976c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod static const hb_tag_t tableTag = HB_OT_TAG_JSTF; 1986c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 1996c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline unsigned int get_script_count (void) const 2006c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod { return scriptList.len; } 2016c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline const Tag& get_script_tag (unsigned int i) const 2026c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod { return scriptList.get_tag (i); } 2036c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline unsigned int get_script_tags (unsigned int start_offset, 2046c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod unsigned int *script_count /* IN/OUT */, 2056c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod hb_tag_t *script_tags /* OUT */) const 2066c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod { return scriptList.get_tags (start_offset, script_count, script_tags); } 2076c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline const JstfScript& get_script (unsigned int i) const 2086c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod { return this+scriptList[i].offset; } 2096c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod inline bool find_script_index (hb_tag_t tag, unsigned int *index) const 2106c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod { return scriptList.find_index (tag, index); } 2116c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 212de2118ed7a998a1df9b28fd1be96b4af89ed82c3Behdad Esfahbod inline bool sanitize (hb_sanitize_context_t *c) const 213de2118ed7a998a1df9b28fd1be96b4af89ed82c3Behdad Esfahbod { 2146c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod TRACE_SANITIZE (this); 215b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod return_trace (version.sanitize (c) && 216b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod likely (version.major == 1) && 217b47159011ca518c3b94d782ed16a91ffe9dd2ab2Behdad Esfahbod scriptList.sanitize (c, this)); 2186c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod } 2196c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 2206c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod protected: 2219a13ed453ef96822a47d6e6f58332b87f38d5c59Behdad Esfahbod FixedVersion<>version; /* Version of the JSTF table--initially set 2227627100f428ac0ec8509d961d368d2d25d8f0b6eBehdad Esfahbod * to 0x00010000u */ 2236c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod RecordArrayOf<JstfScript> 2246c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod scriptList; /* Array of JstfScripts--listed 2256c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod * alphabetically by ScriptTag */ 2266c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod public: 2276c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod DEFINE_SIZE_ARRAY (6, scriptList); 2286c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod}; 2296c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 2306c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 2316c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod} /* namespace OT */ 2326c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 2336c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod 2346c48f20eea22c6e686416ab4ec8388be3e8cd0b5Behdad Esfahbod#endif /* HB_OT_LAYOUT_JSTF_TABLE_HH */ 235