1464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com/*
2464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * Copyright 2011 Google Inc. All Rights Reserved.
3464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com *
4464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * Licensed under the Apache License, Version 2.0 (the "License");
5464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * you may not use this file except in compliance with the License.
6464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * You may obtain a copy of the License at
7464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com *
8464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com *      http://www.apache.org/licenses/LICENSE-2.0
9464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com *
10464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * Unless required by applicable law or agreed to in writing, software
11464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * distributed under the License is distributed on an "AS IS" BASIS,
12464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * See the License for the specific language governing permissions and
14464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * limitations under the License.
15464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com */
16464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
175af34fd773f8cfee82321393504f558ddf67c628arthurhsu@google.com#include "sfntly/table/core/os2_table.h"
18464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
198f090032dd4f8f8908f338cc73bb840b788377f2stuartg@google.com#include <algorithm>
208f090032dd4f8f8908f338cc73bb840b788377f2stuartg@google.com
21464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comnamespace sfntly {
22464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com/******************************************************************************
23464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * Constants
24464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com ******************************************************************************/
25464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kLatin1_1252 = (int64_t)1 << 0;
26464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kLatin2_1250 = (int64_t)1 << (int64_t)1;
27464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kCyrillic_1251 = (int64_t)1 << 2;
28464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kGreek_1253 = (int64_t)1 << 3;
29464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kTurkish_1254 = (int64_t)1 << 4;
30464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kHebrew_1255 = (int64_t)1 << 5;
31464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kArabic_1256 = (int64_t)1 << 6;
32464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kWindowsBaltic_1257 = (int64_t)1 << 7;
33464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kVietnamese_1258 = (int64_t)1 << 8;
34464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI9 = (int64_t)1 << 9;
35464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI10 = (int64_t)1 << 10;
36464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI11 = (int64_t)1 << 11;
37464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI12 = (int64_t)1 << 12;
38464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI13 = (int64_t)1 << 13;
39464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI14 = (int64_t)1 << 14;
40464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI15 = (int64_t)1 << 15;
41464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kThai_874 = (int64_t)1 << 16;
42464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kJapanJIS_932 = (int64_t)1 << 17;
43464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kChineseSimplified_936 = (int64_t)1 << 18;
44464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kKoreanWansung_949 = (int64_t)1 << 19;
45464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kChineseTraditional_950 = (int64_t)1 << 20;
46464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kKoreanJohab_1361 = (int64_t)1 << 21;
47464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI22 = (int64_t)1 << 22;
48464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI23 = (int64_t)1 << 23;
49464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI24 = (int64_t)1 << 24;
50464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI25 = (int64_t)1 << 25;
51464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI26 = (int64_t)1 << 26;
52464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI27 = (int64_t)1 << 27;
53464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kAlternateANSI28 = (int64_t)1 << 28;
54464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kMacintoshCharacterSet = (int64_t)1 << 29;
55464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kOEMCharacterSet = (int64_t)1 << 30;
56464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kSymbolCharacterSet = (int64_t)1 << 31;
57464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM32 = (int64_t)1 << 32;
58464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM33 = (int64_t)1 << 33;
59464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM34 = (int64_t)1 << 34;
60464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM35 = (int64_t)1 << 35;
61464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM36 = (int64_t)1 << 36;
62464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM37 = (int64_t)1 << 37;
63464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM38 = (int64_t)1 << 38;
64464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM39 = (int64_t)1 << 39;
65464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM40 = (int64_t)1 << 40;
66464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM41 = (int64_t)1 << 41;
67464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM42 = (int64_t)1 << 42;
68464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM43 = (int64_t)1 << 43;
69464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM44 = (int64_t)1 << 44;
70464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM45 = (int64_t)1 << 45;
71464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM46 = (int64_t)1 << 46;
72464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kReservedForOEM47 = (int64_t)1 << 47;
73464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kIBMGreek_869 = (int64_t)1 << 48;
74464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kMSDOSRussion_866 = (int64_t)1 << 49;
75464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kMSDOSNordic_865 = (int64_t)1 << 50;
76464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kArabic_864 = (int64_t)1 << 51;
77464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kMSDOSCanadianFrench_863 = (int64_t)1 << 52;
78464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kHebrew_862 = (int64_t)1 << 53;
79464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kMSDOSIcelandic_861 = (int64_t)1 << 54;
80464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kMSDOSPortugese_860 = (int64_t)1 << 55;
81464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kIBMTurkish_857 = (int64_t)1 << 56;
82464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kIBMCyrillic_855 = (int64_t)1 << 57;
83464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kLatin2_852 = (int64_t)1 << 58;
84464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kMSDOSBaltic_775 = (int64_t)1 << 59;
85464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kGreek_737 = (int64_t)1 << 60;
86464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kArabic_708 = (int64_t)1 << 61;
87464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kLatin1_850 = (int64_t)1 << 62;
88464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst int64_t CodePageRange::kUS_437 = (int64_t)1 << 63;
89464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
90464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com/******************************************************************************
91464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * struct UnicodeRange
92464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com ******************************************************************************/
93464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comint32_t UnicodeRange::range(int32_t bit) {
94464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  if (bit < 0 || bit > kLast) {
95464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com    return -1;
96464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  }
97464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  return bit;
98464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
99464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
100464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com/******************************************************************************
101464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * class OS2Table
102464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com ******************************************************************************/
103464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comOS2Table::~OS2Table() {}
104464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
105b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::TableVersion() {
106246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadUShort(Offset::kVersion);
107464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
108464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
109246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::XAvgCharWidth() {
110246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kXAvgCharWidth);
111464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
112464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
113246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::UsWeightClass() {
114246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadUShort(Offset::kUsWeightClass);
115464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
116464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
117246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::UsWidthClass() {
118246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadUShort(Offset::kUsWidthClass);
119464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
120464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
121246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::FsType() {
122246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadUShort(Offset::kFsType);
123464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
124464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
125246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::YSubscriptXSize() {
126246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kYSubscriptXSize);
127464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
128464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
129246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::YSubscriptYSize() {
130246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kYSubscriptYSize);
131464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
132464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
133246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::YSubscriptXOffset() {
134246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kYSubscriptXOffset);
135464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
136464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
137246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::YSubscriptYOffset() {
138246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kYSubscriptYOffset);
139464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
140464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
141246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::YSuperscriptXSize() {
142246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kYSuperscriptXSize);
143464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
144464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
145246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::YSuperscriptYSize() {
146246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kYSuperscriptYSize);
147464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
148464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
149246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::YSuperscriptXOffset() {
150246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kYSuperscriptXOffset);
151464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
152464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
153246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::YSuperscriptYOffset() {
154246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kYSuperscriptYOffset);
155464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
156464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
157246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::YStrikeoutSize() {
158246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kYStrikeoutSize);
159464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
160464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
161246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::YStrikeoutPosition() {
162246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kYStrikeoutPosition);
163464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
164464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
165246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::SFamilyClass() {
166246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kSFamilyClass);
167464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
168464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
169246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comvoid OS2Table::Panose(ByteVector* value) {
170b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  assert(value);
171464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  value->clear();
172464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  value->resize(10);
17332a01c7c6e7be46dda9bfc78de9ce32d99e4c8b7arthurhsu@google.com  data_->ReadBytes(Offset::kPanose, &((*value)[0]), 0, 10);
174464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
175464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
176246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint64_t OS2Table::UlUnicodeRange1() {
177246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadULong(Offset::kUlUnicodeRange1);
178464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
179464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
180246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint64_t OS2Table::UlUnicodeRange2() {
181246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadULong(Offset::kUlUnicodeRange2);
182464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
183464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
184246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint64_t OS2Table::UlUnicodeRange3() {
185246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadULong(Offset::kUlUnicodeRange3);
186464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
187464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
188246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint64_t OS2Table::UlUnicodeRange4() {
189246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadULong(Offset::kUlUnicodeRange4);
190464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
191464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
192246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comvoid OS2Table::AchVendId(ByteVector* b) {
193b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  assert(b);
194464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  b->clear();
195464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  b->resize(4);
19632a01c7c6e7be46dda9bfc78de9ce32d99e4c8b7arthurhsu@google.com  data_->ReadBytes(Offset::kAchVendId, &((*b)[0]), 0, 4);
197464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
198464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
199246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::FsSelection() {
200246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadUShort(Offset::kFsSelection);
201464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
202464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
203246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::UsFirstCharIndex() {
204246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadUShort(Offset::kUsFirstCharIndex);
205464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
206464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
207246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::UsLastCharIndex() {
208246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadUShort(Offset::kUsLastCharIndex);
209464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
210464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
211246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::STypoAscender() {
212246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kSTypoAscender);
213464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
214464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
215f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.comint32_t OS2Table::STypoDescender() {
216246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kSTypoDescender);
217464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
218464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
219246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::STypoLineGap() {
220246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kSTypoLineGap);
221464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
222464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
223246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::UsWinAscent() {
224246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadUShort(Offset::kUsWinAscent);
225464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
226464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
227246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::UsWinDescent() {
228246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadUShort(Offset::kUsWinDescent);
229464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
230464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
231246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint64_t OS2Table::UlCodePageRange1() {
232246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadULong(Offset::kUlCodePageRange1);
233464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
234464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
235246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint64_t OS2Table::UlCodePageRange2() {
236246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadULong(Offset::kUlCodePageRange2);
237464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
238464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
239246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::SxHeight() {
240246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadShort(Offset::kSxHeight);
241464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
242464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
243b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::SCapHeight() {
244b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return data_->ReadShort(Offset::kSCapHeight);
245b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
246b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
247246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::UsDefaultChar() {
248246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadUShort(Offset::kUsDefaultChar);
249464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
250464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
251246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::UsBreakChar() {
252246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadUShort(Offset::kUsBreakChar);
253464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
254464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
255246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t OS2Table::UsMaxContext() {
256246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return data_->ReadUShort(Offset::kUsMaxContext);
257246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com}
258246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com
259246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comOS2Table::OS2Table(Header* header, ReadableFontData* data)
260246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com    : Table(header, data) {
261464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
262464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
263464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com/******************************************************************************
264464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * class OS2Table::Builder
265464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com ******************************************************************************/
2666b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comOS2Table::Builder::Builder(Header* header, WritableFontData* data)
2676b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com    : TableBasedTableBuilder(header, data) {
268b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
269b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
2706b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comOS2Table::Builder::Builder(Header* header, ReadableFontData* data)
2716b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com    : TableBasedTableBuilder(header, data) {
272464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
273464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
274464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comOS2Table::Builder::~Builder() {}
275464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
276246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comCALLER_ATTACH FontDataTable* OS2Table::Builder::SubBuildTable(
277464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com    ReadableFontData* data) {
278464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  FontDataTablePtr table = new OS2Table(header(), data);
279246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  return table.Detach();
280464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
281464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
282b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comCALLER_ATTACH OS2Table::Builder*
283b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com    OS2Table::Builder::CreateBuilder(Header* header,
284b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com                                     WritableFontData* data) {
285b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  Ptr<OS2Table::Builder> builder;
286b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  builder = new OS2Table::Builder(header, data);
287b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return builder.Detach();
288b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
289b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
290b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::TableVersion() {
291b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadUShort(Offset::kVersion);
292b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
293b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
294b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetTableVersion(int32_t version) {
295b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteUShort(Offset::kVersion, version);
296b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
297b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
298b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::XAvgCharWidth() {
299b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kXAvgCharWidth);
300b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
301b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
302b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetXAvgCharWidth(int32_t width) {
303b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kXAvgCharWidth, width);
304b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
305b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
306b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::UsWeightClass() {
307b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadUShort(Offset::kUsWeightClass);
308b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
309b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
310b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUsWeightClass(int32_t weight) {
311b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteUShort(Offset::kUsWeightClass, weight);
312b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
313b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
314b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::UsWidthClass() {
315b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadUShort(Offset::kUsWidthClass);
316b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
317b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
318b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUsWidthClass(int32_t width) {
319b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteUShort(Offset::kUsWidthClass, width);
320b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
321b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
322b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::FsType() {
323b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadUShort(Offset::kFsType);
324b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
325b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
326b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetFsType(int32_t fs_type) {
327b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteUShort(Offset::kFsType, fs_type);
328b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
329b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
330b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::YSubscriptXSize() {
331b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kYSubscriptXSize);
332b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
333b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
334b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetYSubscriptXSize(int32_t size) {
335b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kYSubscriptXSize, size);
336b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
337b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
338b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::YSubscriptYSize() {
339b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kYSubscriptYSize);
340b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
341b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
342b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetYSubscriptYSize(int32_t size) {
343b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kYSubscriptYSize, size);
344b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
345b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
346b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::YSubscriptXOffset() {
347b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kYSubscriptXOffset);
348b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
349b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
350b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetYSubscriptXOffset(int32_t offset) {
351b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kYSubscriptXOffset, offset);
352b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
353b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
354b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::YSubscriptYOffset() {
355b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kYSubscriptYOffset);
356b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
357b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
358b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetYSubscriptYOffset(int32_t offset) {
359b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kYSubscriptYOffset, offset);
360b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
361b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
362b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::YSuperscriptXSize() {
363b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kYSuperscriptXSize);
364b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
365b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
366b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetYSuperscriptXSize(int32_t size) {
367b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kYSuperscriptXSize, size);
368b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
369b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
370b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::YSuperscriptYSize() {
371b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kYSuperscriptYSize);
372b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
373b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
374b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetYSuperscriptYSize(int32_t size) {
375b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kYSuperscriptYSize, size);
376b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
377b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
378b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::YSuperscriptXOffset() {
379b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kYSuperscriptXOffset);
380b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
381b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
382b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetYSuperscriptXOffset(int32_t offset) {
383b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kYSuperscriptXOffset, offset);
384b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
385b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
386b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::YSuperscriptYOffset() {
387b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kYSuperscriptYOffset);
388b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
389b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
390b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetYSuperscriptYOffset(int32_t offset) {
391b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kYSuperscriptYOffset, offset);
392b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
393b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
394b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::YStrikeoutSize() {
395b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kYStrikeoutSize);
396b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
397b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
398b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetYStrikeoutSize(int32_t size) {
399b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kYStrikeoutSize, size);
400b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
401b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
402b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::YStrikeoutPosition() {
403b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kYStrikeoutPosition);
404b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
405b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
406b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetYStrikeoutPosition(int32_t position) {
407b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kYStrikeoutPosition, position);
408b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
409b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
410b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::SFamilyClass() {
411b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kSFamilyClass);
412b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
413b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
414b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetSFamilyClass(int32_t family) {
415b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kSFamilyClass, family);
416b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
417b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
418b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::Panose(ByteVector* value) {
419b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  assert(value);
420b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  value->clear();
421b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  value->resize(Offset::kPanoseLength);
422b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalReadData()->ReadBytes(Offset::kPanose,
423b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com                                &((*value)[0]),
424b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com                                0,
425b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com                                Offset::kPanoseLength);
426b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
427b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
428b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetPanose(ByteVector* panose) {
429b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  assert(panose);
430b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  if (panose->size() != Offset::kPanoseLength) {
431b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com#if !defined (SFNTLY_NO_EXCEPTION)
432b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com    throw IllegalArgumentException("Panose bytes must be exactly 10 in length");
433b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com#endif
434b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com    return;
435b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  }
436b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteBytes(Offset::kPanose, panose);
437b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
438b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
439b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint64_t OS2Table::Builder::UlUnicodeRange1() {
440b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadULong(Offset::kUlUnicodeRange1);
441b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
442b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
443b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUlUnicodeRange1(int64_t range) {
444b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteULong(Offset::kUlUnicodeRange1, range);
445b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
446b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
447b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint64_t OS2Table::Builder::UlUnicodeRange2() {
448b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadULong(Offset::kUlUnicodeRange2);
449b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
450b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
451b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUlUnicodeRange2(int64_t range) {
452b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteULong(Offset::kUlUnicodeRange2, range);
453b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
454b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
455b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint64_t OS2Table::Builder::UlUnicodeRange3() {
456b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadULong(Offset::kUlUnicodeRange3);
457b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
458b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
459b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUlUnicodeRange3(int64_t range) {
460b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteULong(Offset::kUlUnicodeRange3, range);
461b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
462b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
463b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint64_t OS2Table::Builder::UlUnicodeRange4() {
464b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadULong(Offset::kUlUnicodeRange4);
465b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
466b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
467b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUlUnicodeRange4(int64_t range) {
468b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteULong(Offset::kUlUnicodeRange4, range);
469b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
470b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
471b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::AchVendId(ByteVector* b) {
472b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  assert(b);
473b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  b->clear();
474b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  b->resize(4);
475b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalReadData()->ReadBytes(Offset::kAchVendId, &((*b)[0]), 0, 4);
476b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
477b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
478b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetAchVendId(ByteVector* b) {
479b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  assert(b);
480b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  assert(b->size());
4816b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com  InternalWriteData()->WriteBytesPad(Offset::kAchVendId,
4826b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com                                     b,
4836b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com                                     0,
4846b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com                                     std::min<size_t>(
4856b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com                                         (size_t)Offset::kAchVendIdLength,
4866b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com                                         b->size()),
4876b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com                                     static_cast<byte_t>(' '));
488b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
489b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
490b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::FsSelection() {
491b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadUShort(Offset::kFsSelection);
492b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
493b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
494b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetFsSelection(int32_t fs_selection) {
495b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteUShort(Offset::kFsSelection, fs_selection);
496b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
497b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
498b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::UsFirstCharIndex() {
499b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadUShort(Offset::kUsFirstCharIndex);
500b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
501b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
502b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUsFirstCharIndex(int32_t first_index) {
503b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteUShort(Offset::kUsFirstCharIndex, first_index);
504b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
505b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
506b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::UsLastCharIndex() {
507b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadUShort(Offset::kUsLastCharIndex);
508b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
509b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
510b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUsLastCharIndex(int32_t last_index) {
511b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteUShort(Offset::kUsLastCharIndex, last_index);
512b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
513b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
514b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::STypoAscender() {
515b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kSTypoAscender);
516b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
517b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
518b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetSTypoAscender(int32_t ascender) {
519b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kSTypoAscender, ascender);
520b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
521b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
522b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::STypoDescender() {
523b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kSTypoDescender);
524b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
525b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
526b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetSTypoDescender(int32_t descender) {
527b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kSTypoDescender, descender);
528b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
529b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
530b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::STypoLineGap() {
531b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kSTypoLineGap);
532b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
533b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
534b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetSTypoLineGap(int32_t line_gap) {
535b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kSTypoLineGap, line_gap);
536b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
537b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
538b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::UsWinAscent() {
539b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadUShort(Offset::kUsWinAscent);
540b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
541b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
542b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUsWinAscent(int32_t ascent) {
543b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteUShort(Offset::kUsWinAscent, ascent);
544b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
545b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
546b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::UsWinDescent() {
547b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadUShort(Offset::kUsWinDescent);
548b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
549b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
550b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUsWinDescent(int32_t descent) {
551b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteUShort(Offset::kUsWinDescent, descent);
552b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
553b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
554b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint64_t OS2Table::Builder::UlCodePageRange1() {
555b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadULong(Offset::kUlCodePageRange1);
556b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
557b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
558b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUlCodePageRange1(int64_t range) {
559b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteULong(Offset::kUlCodePageRange1, range);
560b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
561b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
562b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint64_t OS2Table::Builder::UlCodePageRange2() {
563b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadULong(Offset::kUlCodePageRange2);
564b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
565b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
566b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUlCodePageRange2(int64_t range) {
567b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteULong(Offset::kUlCodePageRange2, range);
568b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
569b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
570b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::SxHeight() {
571b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kSxHeight);
572b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
573b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
574b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetSxHeight(int32_t height) {
575b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kSxHeight, height);
576b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
577b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
578b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::SCapHeight() {
579b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadShort(Offset::kSCapHeight);
580b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
581b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
582b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetSCapHeight(int32_t height) {
583b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteShort(Offset::kSCapHeight, height);
584b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
585b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
586b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::UsDefaultChar() {
587b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadUShort(Offset::kUsDefaultChar);
588b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
589b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
590b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUsDefaultChar(int32_t default_char) {
591b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteUShort(Offset::kUsDefaultChar, default_char);
592b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
593b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
594b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::UsBreakChar() {
595b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadUShort(Offset::kUsBreakChar);
596b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
597b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
598b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUsBreakChar(int32_t break_char) {
599b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteUShort(Offset::kUsBreakChar, break_char);
600b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
601b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
602b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comint32_t OS2Table::Builder::UsMaxContext() {
603b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  return InternalReadData()->ReadUShort(Offset::kUsMaxContext);
604b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
605b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
606b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.comvoid OS2Table::Builder::SetUsMaxContext(int32_t max_context) {
607b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  InternalWriteData()->WriteUShort(Offset::kUsMaxContext, max_context);
608b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com}
609b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com
610464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}  // namespace sfntly
611