Coverage Report

Created: 2023-06-07 06:27

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