1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Copyright © 2013  Google, Inc.
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  This is part of HarfBuzz, a text shaping library.
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Permission is hereby granted, without written agreement and without
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * license or royalty fees, to use, copy, modify, and distribute this
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * software and its documentation for any purpose, provided that the
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * above copyright notice and the following two paragraphs appear in
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * all copies of this software.
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * DAMAGE.
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Google Author(s): Behdad Esfahbod
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef HB_OT_LAYOUT_JSTF_TABLE_HH
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define HB_OT_LAYOUT_JSTF_TABLE_HH
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "hb-open-type-private.hh"
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "hb-ot-layout-gpos-table.hh"
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace OT {
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * JstfModList -- Justification Modification List Tables
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef IndexArray JstfModList;
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * JstfMax -- Justification Maximum Table
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef OffsetListOf<PosLookup> JstfMax;
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * JstfPriority -- Justification Priority Table
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct JstfPriority
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline bool sanitize (hb_sanitize_context_t *c) {
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    TRACE_SANITIZE (this);
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return TRACE_RETURN (c->check_struct (this) &&
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 shrinkageEnableGSUB.sanitize (c, this) &&
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 shrinkageDisableGSUB.sanitize (c, this) &&
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 shrinkageEnableGPOS.sanitize (c, this) &&
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 shrinkageDisableGPOS.sanitize (c, this) &&
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 shrinkageJstfMax.sanitize (c, this) &&
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 extensionEnableGSUB.sanitize (c, this) &&
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 extensionDisableGSUB.sanitize (c, this) &&
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 extensionEnableGPOS.sanitize (c, this) &&
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 extensionDisableGPOS.sanitize (c, this) &&
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 extensionJstfMax.sanitize (c, this));
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  protected:
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  OffsetTo<JstfModList>
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		shrinkageEnableGSUB;	/* Offset to Shrinkage Enable GSUB
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfModList table--from beginning of
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfPriority table--may be NULL */
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  OffsetTo<JstfModList>
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		shrinkageDisableGSUB;	/* Offset to Shrinkage Disable GSUB
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfModList table--from beginning of
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfPriority table--may be NULL */
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  OffsetTo<JstfModList>
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		shrinkageEnableGPOS;	/* Offset to Shrinkage Enable GPOS
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfModList table--from beginning of
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfPriority table--may be NULL */
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  OffsetTo<JstfModList>
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		shrinkageDisableGPOS;	/* Offset to Shrinkage Disable GPOS
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfModList table--from beginning of
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfPriority table--may be NULL */
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  OffsetTo<JstfMax>
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		shrinkageJstfMax;	/* Offset to Shrinkage JstfMax table--
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * from beginning of JstfPriority table
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * --may be NULL */
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  OffsetTo<JstfModList>
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		extensionEnableGSUB;	/* Offset to Extension Enable GSUB
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfModList table--from beginning of
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfPriority table--may be NULL */
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  OffsetTo<JstfModList>
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		extensionDisableGSUB;	/* Offset to Extension Disable GSUB
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfModList table--from beginning of
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfPriority table--may be NULL */
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  OffsetTo<JstfModList>
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		extensionEnableGPOS;	/* Offset to Extension Enable GPOS
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfModList table--from beginning of
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfPriority table--may be NULL */
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  OffsetTo<JstfModList>
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		extensionDisableGPOS;	/* Offset to Extension Disable GPOS
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfModList table--from beginning of
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * JstfPriority table--may be NULL */
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  OffsetTo<JstfMax>
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		extensionJstfMax;	/* Offset to Extension JstfMax table--
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * from beginning of JstfPriority table
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 * --may be NULL */
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  public:
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DEFINE_SIZE_STATIC (20);
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * JstfLangSys -- Justification Language System Table
121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct JstfLangSys : OffsetListOf<JstfPriority>
124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline bool sanitize (hb_sanitize_context_t *c,
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			const Record<JstfLangSys>::sanitize_closure_t * = NULL) {
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    TRACE_SANITIZE (this);
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return TRACE_RETURN (OffsetListOf<JstfPriority>::sanitize (c));
129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*
134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * ExtenderGlyphs -- Extender Glyph Table
135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef SortedArrayOf<GlyphID> ExtenderGlyphs;
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * JstfScript -- The Justification Table
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct JstfScript
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){
146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline unsigned int get_lang_sys_count (void) const
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  { return langSys.len; }
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline const Tag& get_lang_sys_tag (unsigned int i) const
149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  { return langSys.get_tag (i); }
150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline unsigned int get_lang_sys_tags (unsigned int start_offset,
151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 unsigned int *lang_sys_count /* IN/OUT */,
152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					 hb_tag_t     *lang_sys_tags /* OUT */) const
153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  { return langSys.get_tags (start_offset, lang_sys_count, lang_sys_tags); }
154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline const JstfLangSys& get_lang_sys (unsigned int i) const
155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  {
156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (i == Index::NOT_FOUND_INDEX) return get_default_lang_sys ();
157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return this+langSys[i].offset;
158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline bool find_lang_sys_index (hb_tag_t tag, unsigned int *index) const
160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  { return langSys.find_index (tag, index); }
161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline bool has_default_lang_sys (void) const { return defaultLangSys != 0; }
163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline const JstfLangSys& get_default_lang_sys (void) const { return this+defaultLangSys; }
164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline bool sanitize (hb_sanitize_context_t *c,
166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			const Record<JstfScript>::sanitize_closure_t * = NULL) {
167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    TRACE_SANITIZE (this);
168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return TRACE_RETURN (extenderGlyphs.sanitize (c, this) &&
169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 defaultLangSys.sanitize (c, this) &&
170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 langSys.sanitize (c, this));
171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  protected:
174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  OffsetTo<ExtenderGlyphs>
175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		extenderGlyphs;	/* Offset to ExtenderGlyph table--from beginning
176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)				 * of JstfScript table-may be NULL */
177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  OffsetTo<JstfLangSys>
178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		defaultLangSys;	/* Offset to DefaultJstfLangSys table--from
179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)				 * beginning of JstfScript table--may be Null */
180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RecordArrayOf<JstfLangSys>
181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		langSys;	/* Array of JstfLangSysRecords--listed
182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)				 * alphabetically by LangSysTag */
183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  public:
184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DEFINE_SIZE_ARRAY (6, langSys);
185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*
189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * JSTF -- The Justification Table
190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct JSTF
193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){
194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static const hb_tag_t tableTag	= HB_OT_TAG_JSTF;
195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline unsigned int get_script_count (void) const
197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  { return scriptList.len; }
198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline const Tag& get_script_tag (unsigned int i) const
199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  { return scriptList.get_tag (i); }
200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline unsigned int get_script_tags (unsigned int start_offset,
201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)				       unsigned int *script_count /* IN/OUT */,
202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)				       hb_tag_t     *script_tags /* OUT */) const
203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  { return scriptList.get_tags (start_offset, script_count, script_tags); }
204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline const JstfScript& get_script (unsigned int i) const
205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  { return this+scriptList[i].offset; }
206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline bool find_script_index (hb_tag_t tag, unsigned int *index) const
207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  { return scriptList.find_index (tag, index); }
208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  inline bool sanitize (hb_sanitize_context_t *c) {
210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    TRACE_SANITIZE (this);
211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return TRACE_RETURN (version.sanitize (c) && likely (version.major == 1) &&
212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 scriptList.sanitize (c, this));
213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  protected:
216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FixedVersion	version;	/* Version of the JSTF table--initially set
217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)				 * to 0x00010000 */
218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RecordArrayOf<JstfScript>
219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		scriptList;  	/* Array of JstfScripts--listed
220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)				 * alphabetically by ScriptTag */
221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  public:
222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DEFINE_SIZE_ARRAY (6, scriptList);
223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} /* namespace OT */
227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif /* HB_OT_LAYOUT_JSTF_TABLE_HH */
230