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