Line data Source code
1 : /*
2 : * Copyright 2011 Google Inc. All Rights Reserved.
3 : *
4 : * Licensed under the Apache License, Version 2.0 (the "License");
5 : * you may not use this file except in compliance with the License.
6 : * You may obtain a copy of the License at
7 : *
8 : * http://www.apache.org/licenses/LICENSE-2.0
9 : *
10 : * Unless required by applicable law or agreed to in writing, software
11 : * distributed under the License is distributed on an "AS IS" BASIS,
12 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 : * See the License for the specific language governing permissions and
14 : * limitations under the License.
15 : */
16 :
17 : #include "sfntly/table/core/os2_table.h"
18 :
19 : #include <algorithm>
20 :
21 : namespace sfntly {
22 : /******************************************************************************
23 : * Constants
24 : ******************************************************************************/
25 : const int64_t CodePageRange::kLatin1_1252 = (int64_t)1 << 0;
26 : const int64_t CodePageRange::kLatin2_1250 = (int64_t)1 << (int64_t)1;
27 : const int64_t CodePageRange::kCyrillic_1251 = (int64_t)1 << 2;
28 : const int64_t CodePageRange::kGreek_1253 = (int64_t)1 << 3;
29 : const int64_t CodePageRange::kTurkish_1254 = (int64_t)1 << 4;
30 : const int64_t CodePageRange::kHebrew_1255 = (int64_t)1 << 5;
31 : const int64_t CodePageRange::kArabic_1256 = (int64_t)1 << 6;
32 : const int64_t CodePageRange::kWindowsBaltic_1257 = (int64_t)1 << 7;
33 : const int64_t CodePageRange::kVietnamese_1258 = (int64_t)1 << 8;
34 : const int64_t CodePageRange::kAlternateANSI9 = (int64_t)1 << 9;
35 : const int64_t CodePageRange::kAlternateANSI10 = (int64_t)1 << 10;
36 : const int64_t CodePageRange::kAlternateANSI11 = (int64_t)1 << 11;
37 : const int64_t CodePageRange::kAlternateANSI12 = (int64_t)1 << 12;
38 : const int64_t CodePageRange::kAlternateANSI13 = (int64_t)1 << 13;
39 : const int64_t CodePageRange::kAlternateANSI14 = (int64_t)1 << 14;
40 : const int64_t CodePageRange::kAlternateANSI15 = (int64_t)1 << 15;
41 : const int64_t CodePageRange::kThai_874 = (int64_t)1 << 16;
42 : const int64_t CodePageRange::kJapanJIS_932 = (int64_t)1 << 17;
43 : const int64_t CodePageRange::kChineseSimplified_936 = (int64_t)1 << 18;
44 : const int64_t CodePageRange::kKoreanWansung_949 = (int64_t)1 << 19;
45 : const int64_t CodePageRange::kChineseTraditional_950 = (int64_t)1 << 20;
46 : const int64_t CodePageRange::kKoreanJohab_1361 = (int64_t)1 << 21;
47 : const int64_t CodePageRange::kAlternateANSI22 = (int64_t)1 << 22;
48 : const int64_t CodePageRange::kAlternateANSI23 = (int64_t)1 << 23;
49 : const int64_t CodePageRange::kAlternateANSI24 = (int64_t)1 << 24;
50 : const int64_t CodePageRange::kAlternateANSI25 = (int64_t)1 << 25;
51 : const int64_t CodePageRange::kAlternateANSI26 = (int64_t)1 << 26;
52 : const int64_t CodePageRange::kAlternateANSI27 = (int64_t)1 << 27;
53 : const int64_t CodePageRange::kAlternateANSI28 = (int64_t)1 << 28;
54 : const int64_t CodePageRange::kMacintoshCharacterSet = (int64_t)1 << 29;
55 : const int64_t CodePageRange::kOEMCharacterSet = (int64_t)1 << 30;
56 : const int64_t CodePageRange::kSymbolCharacterSet = (int64_t)1 << 31;
57 : const int64_t CodePageRange::kReservedForOEM32 = (int64_t)1 << 32;
58 : const int64_t CodePageRange::kReservedForOEM33 = (int64_t)1 << 33;
59 : const int64_t CodePageRange::kReservedForOEM34 = (int64_t)1 << 34;
60 : const int64_t CodePageRange::kReservedForOEM35 = (int64_t)1 << 35;
61 : const int64_t CodePageRange::kReservedForOEM36 = (int64_t)1 << 36;
62 : const int64_t CodePageRange::kReservedForOEM37 = (int64_t)1 << 37;
63 : const int64_t CodePageRange::kReservedForOEM38 = (int64_t)1 << 38;
64 : const int64_t CodePageRange::kReservedForOEM39 = (int64_t)1 << 39;
65 : const int64_t CodePageRange::kReservedForOEM40 = (int64_t)1 << 40;
66 : const int64_t CodePageRange::kReservedForOEM41 = (int64_t)1 << 41;
67 : const int64_t CodePageRange::kReservedForOEM42 = (int64_t)1 << 42;
68 : const int64_t CodePageRange::kReservedForOEM43 = (int64_t)1 << 43;
69 : const int64_t CodePageRange::kReservedForOEM44 = (int64_t)1 << 44;
70 : const int64_t CodePageRange::kReservedForOEM45 = (int64_t)1 << 45;
71 : const int64_t CodePageRange::kReservedForOEM46 = (int64_t)1 << 46;
72 : const int64_t CodePageRange::kReservedForOEM47 = (int64_t)1 << 47;
73 : const int64_t CodePageRange::kIBMGreek_869 = (int64_t)1 << 48;
74 : const int64_t CodePageRange::kMSDOSRussion_866 = (int64_t)1 << 49;
75 : const int64_t CodePageRange::kMSDOSNordic_865 = (int64_t)1 << 50;
76 : const int64_t CodePageRange::kArabic_864 = (int64_t)1 << 51;
77 : const int64_t CodePageRange::kMSDOSCanadianFrench_863 = (int64_t)1 << 52;
78 : const int64_t CodePageRange::kHebrew_862 = (int64_t)1 << 53;
79 : const int64_t CodePageRange::kMSDOSIcelandic_861 = (int64_t)1 << 54;
80 : const int64_t CodePageRange::kMSDOSPortugese_860 = (int64_t)1 << 55;
81 : const int64_t CodePageRange::kIBMTurkish_857 = (int64_t)1 << 56;
82 : const int64_t CodePageRange::kIBMCyrillic_855 = (int64_t)1 << 57;
83 : const int64_t CodePageRange::kLatin2_852 = (int64_t)1 << 58;
84 : const int64_t CodePageRange::kMSDOSBaltic_775 = (int64_t)1 << 59;
85 : const int64_t CodePageRange::kGreek_737 = (int64_t)1 << 60;
86 : const int64_t CodePageRange::kArabic_708 = (int64_t)1 << 61;
87 : const int64_t CodePageRange::kLatin1_850 = (int64_t)1 << 62;
88 : const int64_t CodePageRange::kUS_437 = (int64_t)1 << 63;
89 :
90 : /******************************************************************************
91 : * struct UnicodeRange
92 : ******************************************************************************/
93 0 : int32_t UnicodeRange::range(int32_t bit) {
94 0 : if (bit < 0 || bit > kLast) {
95 0 : return -1;
96 : }
97 0 : return bit;
98 : }
99 :
100 : /******************************************************************************
101 : * class OS2Table
102 : ******************************************************************************/
103 0 : OS2Table::~OS2Table() {}
104 :
105 0 : int32_t OS2Table::TableVersion() {
106 0 : return data_->ReadUShort(Offset::kVersion);
107 : }
108 :
109 0 : int32_t OS2Table::XAvgCharWidth() {
110 0 : return data_->ReadShort(Offset::kXAvgCharWidth);
111 : }
112 :
113 0 : int32_t OS2Table::UsWeightClass() {
114 0 : return data_->ReadUShort(Offset::kUsWeightClass);
115 : }
116 :
117 0 : int32_t OS2Table::UsWidthClass() {
118 0 : return data_->ReadUShort(Offset::kUsWidthClass);
119 : }
120 :
121 0 : int32_t OS2Table::FsType() {
122 0 : return data_->ReadUShort(Offset::kFsType);
123 : }
124 :
125 0 : int32_t OS2Table::YSubscriptXSize() {
126 0 : return data_->ReadShort(Offset::kYSubscriptXSize);
127 : }
128 :
129 0 : int32_t OS2Table::YSubscriptYSize() {
130 0 : return data_->ReadShort(Offset::kYSubscriptYSize);
131 : }
132 :
133 0 : int32_t OS2Table::YSubscriptXOffset() {
134 0 : return data_->ReadShort(Offset::kYSubscriptXOffset);
135 : }
136 :
137 0 : int32_t OS2Table::YSubscriptYOffset() {
138 0 : return data_->ReadShort(Offset::kYSubscriptYOffset);
139 : }
140 :
141 0 : int32_t OS2Table::YSuperscriptXSize() {
142 0 : return data_->ReadShort(Offset::kYSuperscriptXSize);
143 : }
144 :
145 0 : int32_t OS2Table::YSuperscriptYSize() {
146 0 : return data_->ReadShort(Offset::kYSuperscriptYSize);
147 : }
148 :
149 0 : int32_t OS2Table::YSuperscriptXOffset() {
150 0 : return data_->ReadShort(Offset::kYSuperscriptXOffset);
151 : }
152 :
153 0 : int32_t OS2Table::YSuperscriptYOffset() {
154 0 : return data_->ReadShort(Offset::kYSuperscriptYOffset);
155 : }
156 :
157 0 : int32_t OS2Table::YStrikeoutSize() {
158 0 : return data_->ReadShort(Offset::kYStrikeoutSize);
159 : }
160 :
161 0 : int32_t OS2Table::YStrikeoutPosition() {
162 0 : return data_->ReadShort(Offset::kYStrikeoutPosition);
163 : }
164 :
165 0 : int32_t OS2Table::SFamilyClass() {
166 0 : return data_->ReadShort(Offset::kSFamilyClass);
167 : }
168 :
169 0 : void OS2Table::Panose(ByteVector* value) {
170 0 : assert(value);
171 0 : value->clear();
172 0 : value->resize(10);
173 0 : data_->ReadBytes(Offset::kPanose, &((*value)[0]), 0, 10);
174 0 : }
175 :
176 0 : int64_t OS2Table::UlUnicodeRange1() {
177 0 : return data_->ReadULong(Offset::kUlUnicodeRange1);
178 : }
179 :
180 0 : int64_t OS2Table::UlUnicodeRange2() {
181 0 : return data_->ReadULong(Offset::kUlUnicodeRange2);
182 : }
183 :
184 0 : int64_t OS2Table::UlUnicodeRange3() {
185 0 : return data_->ReadULong(Offset::kUlUnicodeRange3);
186 : }
187 :
188 0 : int64_t OS2Table::UlUnicodeRange4() {
189 0 : return data_->ReadULong(Offset::kUlUnicodeRange4);
190 : }
191 :
192 0 : void OS2Table::AchVendId(ByteVector* b) {
193 0 : assert(b);
194 0 : b->clear();
195 0 : b->resize(4);
196 0 : data_->ReadBytes(Offset::kAchVendId, &((*b)[0]), 0, 4);
197 0 : }
198 :
199 0 : int32_t OS2Table::FsSelection() {
200 0 : return data_->ReadUShort(Offset::kFsSelection);
201 : }
202 :
203 0 : int32_t OS2Table::UsFirstCharIndex() {
204 0 : return data_->ReadUShort(Offset::kUsFirstCharIndex);
205 : }
206 :
207 0 : int32_t OS2Table::UsLastCharIndex() {
208 0 : return data_->ReadUShort(Offset::kUsLastCharIndex);
209 : }
210 :
211 0 : int32_t OS2Table::STypoAscender() {
212 0 : return data_->ReadShort(Offset::kSTypoAscender);
213 : }
214 :
215 0 : int32_t OS2Table::STypoDescender() {
216 0 : return data_->ReadShort(Offset::kSTypoDescender);
217 : }
218 :
219 0 : int32_t OS2Table::STypoLineGap() {
220 0 : return data_->ReadShort(Offset::kSTypoLineGap);
221 : }
222 :
223 0 : int32_t OS2Table::UsWinAscent() {
224 0 : return data_->ReadUShort(Offset::kUsWinAscent);
225 : }
226 :
227 0 : int32_t OS2Table::UsWinDescent() {
228 0 : return data_->ReadUShort(Offset::kUsWinDescent);
229 : }
230 :
231 0 : int64_t OS2Table::UlCodePageRange1() {
232 0 : return data_->ReadULong(Offset::kUlCodePageRange1);
233 : }
234 :
235 0 : int64_t OS2Table::UlCodePageRange2() {
236 0 : return data_->ReadULong(Offset::kUlCodePageRange2);
237 : }
238 :
239 0 : int32_t OS2Table::SxHeight() {
240 0 : return data_->ReadShort(Offset::kSxHeight);
241 : }
242 :
243 0 : int32_t OS2Table::SCapHeight() {
244 0 : return data_->ReadShort(Offset::kSCapHeight);
245 : }
246 :
247 0 : int32_t OS2Table::UsDefaultChar() {
248 0 : return data_->ReadUShort(Offset::kUsDefaultChar);
249 : }
250 :
251 0 : int32_t OS2Table::UsBreakChar() {
252 0 : return data_->ReadUShort(Offset::kUsBreakChar);
253 : }
254 :
255 0 : int32_t OS2Table::UsMaxContext() {
256 0 : return data_->ReadUShort(Offset::kUsMaxContext);
257 : }
258 :
259 0 : OS2Table::OS2Table(Header* header, ReadableFontData* data)
260 0 : : Table(header, data) {
261 0 : }
262 :
263 : /******************************************************************************
264 : * class OS2Table::Builder
265 : ******************************************************************************/
266 0 : OS2Table::Builder::Builder(Header* header, WritableFontData* data)
267 0 : : TableBasedTableBuilder(header, data) {
268 0 : }
269 :
270 0 : OS2Table::Builder::Builder(Header* header, ReadableFontData* data)
271 0 : : TableBasedTableBuilder(header, data) {
272 0 : }
273 :
274 0 : OS2Table::Builder::~Builder() {}
275 :
276 0 : CALLER_ATTACH FontDataTable* OS2Table::Builder::SubBuildTable(
277 : ReadableFontData* data) {
278 0 : FontDataTablePtr table = new OS2Table(header(), data);
279 0 : return table.Detach();
280 : }
281 :
282 : CALLER_ATTACH OS2Table::Builder*
283 0 : OS2Table::Builder::CreateBuilder(Header* header,
284 : WritableFontData* data) {
285 0 : Ptr<OS2Table::Builder> builder;
286 0 : builder = new OS2Table::Builder(header, data);
287 0 : return builder.Detach();
288 : }
289 :
290 0 : int32_t OS2Table::Builder::TableVersion() {
291 0 : return InternalReadData()->ReadUShort(Offset::kVersion);
292 : }
293 :
294 0 : void OS2Table::Builder::SetTableVersion(int32_t version) {
295 0 : InternalWriteData()->WriteUShort(Offset::kVersion, version);
296 0 : }
297 :
298 0 : int32_t OS2Table::Builder::XAvgCharWidth() {
299 0 : return InternalReadData()->ReadShort(Offset::kXAvgCharWidth);
300 : }
301 :
302 0 : void OS2Table::Builder::SetXAvgCharWidth(int32_t width) {
303 0 : InternalWriteData()->WriteShort(Offset::kXAvgCharWidth, width);
304 0 : }
305 :
306 0 : int32_t OS2Table::Builder::UsWeightClass() {
307 0 : return InternalReadData()->ReadUShort(Offset::kUsWeightClass);
308 : }
309 :
310 0 : void OS2Table::Builder::SetUsWeightClass(int32_t weight) {
311 0 : InternalWriteData()->WriteUShort(Offset::kUsWeightClass, weight);
312 0 : }
313 :
314 0 : int32_t OS2Table::Builder::UsWidthClass() {
315 0 : return InternalReadData()->ReadUShort(Offset::kUsWidthClass);
316 : }
317 :
318 0 : void OS2Table::Builder::SetUsWidthClass(int32_t width) {
319 0 : InternalWriteData()->WriteUShort(Offset::kUsWidthClass, width);
320 0 : }
321 :
322 0 : int32_t OS2Table::Builder::FsType() {
323 0 : return InternalReadData()->ReadUShort(Offset::kFsType);
324 : }
325 :
326 0 : void OS2Table::Builder::SetFsType(int32_t fs_type) {
327 0 : InternalWriteData()->WriteUShort(Offset::kFsType, fs_type);
328 0 : }
329 :
330 0 : int32_t OS2Table::Builder::YSubscriptXSize() {
331 0 : return InternalReadData()->ReadShort(Offset::kYSubscriptXSize);
332 : }
333 :
334 0 : void OS2Table::Builder::SetYSubscriptXSize(int32_t size) {
335 0 : InternalWriteData()->WriteShort(Offset::kYSubscriptXSize, size);
336 0 : }
337 :
338 0 : int32_t OS2Table::Builder::YSubscriptYSize() {
339 0 : return InternalReadData()->ReadShort(Offset::kYSubscriptYSize);
340 : }
341 :
342 0 : void OS2Table::Builder::SetYSubscriptYSize(int32_t size) {
343 0 : InternalWriteData()->WriteShort(Offset::kYSubscriptYSize, size);
344 0 : }
345 :
346 0 : int32_t OS2Table::Builder::YSubscriptXOffset() {
347 0 : return InternalReadData()->ReadShort(Offset::kYSubscriptXOffset);
348 : }
349 :
350 0 : void OS2Table::Builder::SetYSubscriptXOffset(int32_t offset) {
351 0 : InternalWriteData()->WriteShort(Offset::kYSubscriptXOffset, offset);
352 0 : }
353 :
354 0 : int32_t OS2Table::Builder::YSubscriptYOffset() {
355 0 : return InternalReadData()->ReadShort(Offset::kYSubscriptYOffset);
356 : }
357 :
358 0 : void OS2Table::Builder::SetYSubscriptYOffset(int32_t offset) {
359 0 : InternalWriteData()->WriteShort(Offset::kYSubscriptYOffset, offset);
360 0 : }
361 :
362 0 : int32_t OS2Table::Builder::YSuperscriptXSize() {
363 0 : return InternalReadData()->ReadShort(Offset::kYSuperscriptXSize);
364 : }
365 :
366 0 : void OS2Table::Builder::SetYSuperscriptXSize(int32_t size) {
367 0 : InternalWriteData()->WriteShort(Offset::kYSuperscriptXSize, size);
368 0 : }
369 :
370 0 : int32_t OS2Table::Builder::YSuperscriptYSize() {
371 0 : return InternalReadData()->ReadShort(Offset::kYSuperscriptYSize);
372 : }
373 :
374 0 : void OS2Table::Builder::SetYSuperscriptYSize(int32_t size) {
375 0 : InternalWriteData()->WriteShort(Offset::kYSuperscriptYSize, size);
376 0 : }
377 :
378 0 : int32_t OS2Table::Builder::YSuperscriptXOffset() {
379 0 : return InternalReadData()->ReadShort(Offset::kYSuperscriptXOffset);
380 : }
381 :
382 0 : void OS2Table::Builder::SetYSuperscriptXOffset(int32_t offset) {
383 0 : InternalWriteData()->WriteShort(Offset::kYSuperscriptXOffset, offset);
384 0 : }
385 :
386 0 : int32_t OS2Table::Builder::YSuperscriptYOffset() {
387 0 : return InternalReadData()->ReadShort(Offset::kYSuperscriptYOffset);
388 : }
389 :
390 0 : void OS2Table::Builder::SetYSuperscriptYOffset(int32_t offset) {
391 0 : InternalWriteData()->WriteShort(Offset::kYSuperscriptYOffset, offset);
392 0 : }
393 :
394 0 : int32_t OS2Table::Builder::YStrikeoutSize() {
395 0 : return InternalReadData()->ReadShort(Offset::kYStrikeoutSize);
396 : }
397 :
398 0 : void OS2Table::Builder::SetYStrikeoutSize(int32_t size) {
399 0 : InternalWriteData()->WriteShort(Offset::kYStrikeoutSize, size);
400 0 : }
401 :
402 0 : int32_t OS2Table::Builder::YStrikeoutPosition() {
403 0 : return InternalReadData()->ReadShort(Offset::kYStrikeoutPosition);
404 : }
405 :
406 0 : void OS2Table::Builder::SetYStrikeoutPosition(int32_t position) {
407 0 : InternalWriteData()->WriteShort(Offset::kYStrikeoutPosition, position);
408 0 : }
409 :
410 0 : int32_t OS2Table::Builder::SFamilyClass() {
411 0 : return InternalReadData()->ReadShort(Offset::kSFamilyClass);
412 : }
413 :
414 0 : void OS2Table::Builder::SetSFamilyClass(int32_t family) {
415 0 : InternalWriteData()->WriteShort(Offset::kSFamilyClass, family);
416 0 : }
417 :
418 0 : void OS2Table::Builder::Panose(ByteVector* value) {
419 0 : assert(value);
420 0 : value->clear();
421 0 : value->resize(Offset::kPanoseLength);
422 0 : InternalReadData()->ReadBytes(Offset::kPanose,
423 0 : &((*value)[0]),
424 : 0,
425 0 : Offset::kPanoseLength);
426 0 : }
427 :
428 0 : void OS2Table::Builder::SetPanose(ByteVector* panose) {
429 0 : assert(panose);
430 0 : if (panose->size() != Offset::kPanoseLength) {
431 : #if !defined (SFNTLY_NO_EXCEPTION)
432 : throw IllegalArgumentException("Panose bytes must be exactly 10 in length");
433 : #endif
434 0 : return;
435 : }
436 0 : InternalWriteData()->WriteBytes(Offset::kPanose, panose);
437 : }
438 :
439 0 : int64_t OS2Table::Builder::UlUnicodeRange1() {
440 0 : return InternalReadData()->ReadULong(Offset::kUlUnicodeRange1);
441 : }
442 :
443 0 : void OS2Table::Builder::SetUlUnicodeRange1(int64_t range) {
444 0 : InternalWriteData()->WriteULong(Offset::kUlUnicodeRange1, range);
445 0 : }
446 :
447 0 : int64_t OS2Table::Builder::UlUnicodeRange2() {
448 0 : return InternalReadData()->ReadULong(Offset::kUlUnicodeRange2);
449 : }
450 :
451 0 : void OS2Table::Builder::SetUlUnicodeRange2(int64_t range) {
452 0 : InternalWriteData()->WriteULong(Offset::kUlUnicodeRange2, range);
453 0 : }
454 :
455 0 : int64_t OS2Table::Builder::UlUnicodeRange3() {
456 0 : return InternalReadData()->ReadULong(Offset::kUlUnicodeRange3);
457 : }
458 :
459 0 : void OS2Table::Builder::SetUlUnicodeRange3(int64_t range) {
460 0 : InternalWriteData()->WriteULong(Offset::kUlUnicodeRange3, range);
461 0 : }
462 :
463 0 : int64_t OS2Table::Builder::UlUnicodeRange4() {
464 0 : return InternalReadData()->ReadULong(Offset::kUlUnicodeRange4);
465 : }
466 :
467 0 : void OS2Table::Builder::SetUlUnicodeRange4(int64_t range) {
468 0 : InternalWriteData()->WriteULong(Offset::kUlUnicodeRange4, range);
469 0 : }
470 :
471 0 : void OS2Table::Builder::AchVendId(ByteVector* b) {
472 0 : assert(b);
473 0 : b->clear();
474 0 : b->resize(4);
475 0 : InternalReadData()->ReadBytes(Offset::kAchVendId, &((*b)[0]), 0, 4);
476 0 : }
477 :
478 0 : void OS2Table::Builder::SetAchVendId(ByteVector* b) {
479 0 : assert(b);
480 0 : assert(b->size());
481 0 : InternalWriteData()->WriteBytesPad(Offset::kAchVendId,
482 : b,
483 : 0,
484 0 : std::min<size_t>(
485 : (size_t)Offset::kAchVendIdLength,
486 0 : b->size()),
487 0 : static_cast<byte_t>(' '));
488 0 : }
489 :
490 0 : int32_t OS2Table::Builder::FsSelection() {
491 0 : return InternalReadData()->ReadUShort(Offset::kFsSelection);
492 : }
493 :
494 0 : void OS2Table::Builder::SetFsSelection(int32_t fs_selection) {
495 0 : InternalWriteData()->WriteUShort(Offset::kFsSelection, fs_selection);
496 0 : }
497 :
498 0 : int32_t OS2Table::Builder::UsFirstCharIndex() {
499 0 : return InternalReadData()->ReadUShort(Offset::kUsFirstCharIndex);
500 : }
501 :
502 0 : void OS2Table::Builder::SetUsFirstCharIndex(int32_t first_index) {
503 0 : InternalWriteData()->WriteUShort(Offset::kUsFirstCharIndex, first_index);
504 0 : }
505 :
506 0 : int32_t OS2Table::Builder::UsLastCharIndex() {
507 0 : return InternalReadData()->ReadUShort(Offset::kUsLastCharIndex);
508 : }
509 :
510 0 : void OS2Table::Builder::SetUsLastCharIndex(int32_t last_index) {
511 0 : InternalWriteData()->WriteUShort(Offset::kUsLastCharIndex, last_index);
512 0 : }
513 :
514 0 : int32_t OS2Table::Builder::STypoAscender() {
515 0 : return InternalReadData()->ReadShort(Offset::kSTypoAscender);
516 : }
517 :
518 0 : void OS2Table::Builder::SetSTypoAscender(int32_t ascender) {
519 0 : InternalWriteData()->WriteShort(Offset::kSTypoAscender, ascender);
520 0 : }
521 :
522 0 : int32_t OS2Table::Builder::STypoDescender() {
523 0 : return InternalReadData()->ReadShort(Offset::kSTypoDescender);
524 : }
525 :
526 0 : void OS2Table::Builder::SetSTypoDescender(int32_t descender) {
527 0 : InternalWriteData()->WriteShort(Offset::kSTypoDescender, descender);
528 0 : }
529 :
530 0 : int32_t OS2Table::Builder::STypoLineGap() {
531 0 : return InternalReadData()->ReadShort(Offset::kSTypoLineGap);
532 : }
533 :
534 0 : void OS2Table::Builder::SetSTypoLineGap(int32_t line_gap) {
535 0 : InternalWriteData()->WriteShort(Offset::kSTypoLineGap, line_gap);
536 0 : }
537 :
538 0 : int32_t OS2Table::Builder::UsWinAscent() {
539 0 : return InternalReadData()->ReadUShort(Offset::kUsWinAscent);
540 : }
541 :
542 0 : void OS2Table::Builder::SetUsWinAscent(int32_t ascent) {
543 0 : InternalWriteData()->WriteUShort(Offset::kUsWinAscent, ascent);
544 0 : }
545 :
546 0 : int32_t OS2Table::Builder::UsWinDescent() {
547 0 : return InternalReadData()->ReadUShort(Offset::kUsWinDescent);
548 : }
549 :
550 0 : void OS2Table::Builder::SetUsWinDescent(int32_t descent) {
551 0 : InternalWriteData()->WriteUShort(Offset::kUsWinDescent, descent);
552 0 : }
553 :
554 0 : int64_t OS2Table::Builder::UlCodePageRange1() {
555 0 : return InternalReadData()->ReadULong(Offset::kUlCodePageRange1);
556 : }
557 :
558 0 : void OS2Table::Builder::SetUlCodePageRange1(int64_t range) {
559 0 : InternalWriteData()->WriteULong(Offset::kUlCodePageRange1, range);
560 0 : }
561 :
562 0 : int64_t OS2Table::Builder::UlCodePageRange2() {
563 0 : return InternalReadData()->ReadULong(Offset::kUlCodePageRange2);
564 : }
565 :
566 0 : void OS2Table::Builder::SetUlCodePageRange2(int64_t range) {
567 0 : InternalWriteData()->WriteULong(Offset::kUlCodePageRange2, range);
568 0 : }
569 :
570 0 : int32_t OS2Table::Builder::SxHeight() {
571 0 : return InternalReadData()->ReadShort(Offset::kSxHeight);
572 : }
573 :
574 0 : void OS2Table::Builder::SetSxHeight(int32_t height) {
575 0 : InternalWriteData()->WriteShort(Offset::kSxHeight, height);
576 0 : }
577 :
578 0 : int32_t OS2Table::Builder::SCapHeight() {
579 0 : return InternalReadData()->ReadShort(Offset::kSCapHeight);
580 : }
581 :
582 0 : void OS2Table::Builder::SetSCapHeight(int32_t height) {
583 0 : InternalWriteData()->WriteShort(Offset::kSCapHeight, height);
584 0 : }
585 :
586 0 : int32_t OS2Table::Builder::UsDefaultChar() {
587 0 : return InternalReadData()->ReadUShort(Offset::kUsDefaultChar);
588 : }
589 :
590 0 : void OS2Table::Builder::SetUsDefaultChar(int32_t default_char) {
591 0 : InternalWriteData()->WriteUShort(Offset::kUsDefaultChar, default_char);
592 0 : }
593 :
594 0 : int32_t OS2Table::Builder::UsBreakChar() {
595 0 : return InternalReadData()->ReadUShort(Offset::kUsBreakChar);
596 : }
597 :
598 0 : void OS2Table::Builder::SetUsBreakChar(int32_t break_char) {
599 0 : InternalWriteData()->WriteUShort(Offset::kUsBreakChar, break_char);
600 0 : }
601 :
602 0 : int32_t OS2Table::Builder::UsMaxContext() {
603 0 : return InternalReadData()->ReadUShort(Offset::kUsMaxContext);
604 : }
605 :
606 0 : void OS2Table::Builder::SetUsMaxContext(int32_t max_context) {
607 0 : InternalWriteData()->WriteUShort(Offset::kUsMaxContext, max_context);
608 0 : }
609 :
610 : } // namespace sfntly
|