130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/*
230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Copyright 2011 Google Inc. All Rights Reserved.
330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *
430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Licensed under the Apache License, Version 2.0 (the "License");
530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * you may not use this file except in compliance with the License.
630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * You may obtain a copy of the License at
730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *
830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *      http://www.apache.org/licenses/LICENSE-2.0
930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *
1030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Unless required by applicable law or agreed to in writing, software
1130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * distributed under the License is distributed on an "AS IS" BASIS,
1230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * See the License for the specific language governing permissions and
1430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * limitations under the License.
1530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun */
1630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
1730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/core/os2_table.h"
1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace sfntly {
2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/******************************************************************************
2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Constants
2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ******************************************************************************/
2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kLatin1_1252 = (int64_t)1 << 0;
2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kLatin2_1250 = (int64_t)1 << (int64_t)1;
2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kCyrillic_1251 = (int64_t)1 << 2;
2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kGreek_1253 = (int64_t)1 << 3;
2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kTurkish_1254 = (int64_t)1 << 4;
2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kHebrew_1255 = (int64_t)1 << 5;
2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kArabic_1256 = (int64_t)1 << 6;
3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kWindowsBaltic_1257 = (int64_t)1 << 7;
3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kVietnamese_1258 = (int64_t)1 << 8;
3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI9 = (int64_t)1 << 9;
3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI10 = (int64_t)1 << 10;
3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI11 = (int64_t)1 << 11;
3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI12 = (int64_t)1 << 12;
3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI13 = (int64_t)1 << 13;
3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI14 = (int64_t)1 << 14;
3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI15 = (int64_t)1 << 15;
3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kThai_874 = (int64_t)1 << 16;
4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kJapanJIS_932 = (int64_t)1 << 17;
4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kChineseSimplified_936 = (int64_t)1 << 18;
4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kKoreanWansung_949 = (int64_t)1 << 19;
4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kChineseTraditional_950 = (int64_t)1 << 20;
4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kKoreanJohab_1361 = (int64_t)1 << 21;
4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI22 = (int64_t)1 << 22;
4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI23 = (int64_t)1 << 23;
4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI24 = (int64_t)1 << 24;
4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI25 = (int64_t)1 << 25;
4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI26 = (int64_t)1 << 26;
5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI27 = (int64_t)1 << 27;
5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kAlternateANSI28 = (int64_t)1 << 28;
5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kMacintoshCharacterSet = (int64_t)1 << 29;
5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kOEMCharacterSet = (int64_t)1 << 30;
5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kSymbolCharacterSet = (int64_t)1 << 31;
5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM32 = (int64_t)1 << 32;
5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM33 = (int64_t)1 << 33;
5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM34 = (int64_t)1 << 34;
5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM35 = (int64_t)1 << 35;
5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM36 = (int64_t)1 << 36;
6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM37 = (int64_t)1 << 37;
6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM38 = (int64_t)1 << 38;
6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM39 = (int64_t)1 << 39;
6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM40 = (int64_t)1 << 40;
6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM41 = (int64_t)1 << 41;
6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM42 = (int64_t)1 << 42;
6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM43 = (int64_t)1 << 43;
6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM44 = (int64_t)1 << 44;
6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM45 = (int64_t)1 << 45;
6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM46 = (int64_t)1 << 46;
7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kReservedForOEM47 = (int64_t)1 << 47;
7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kIBMGreek_869 = (int64_t)1 << 48;
7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kMSDOSRussion_866 = (int64_t)1 << 49;
7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kMSDOSNordic_865 = (int64_t)1 << 50;
7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kArabic_864 = (int64_t)1 << 51;
7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kMSDOSCanadianFrench_863 = (int64_t)1 << 52;
7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kHebrew_862 = (int64_t)1 << 53;
7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kMSDOSIcelandic_861 = (int64_t)1 << 54;
7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kMSDOSPortugese_860 = (int64_t)1 << 55;
7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kIBMTurkish_857 = (int64_t)1 << 56;
8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kIBMCyrillic_855 = (int64_t)1 << 57;
8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kLatin2_852 = (int64_t)1 << 58;
8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kMSDOSBaltic_775 = (int64_t)1 << 59;
8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kGreek_737 = (int64_t)1 << 60;
8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kArabic_708 = (int64_t)1 << 61;
8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kLatin1_850 = (int64_t)1 << 62;
8630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int64_t CodePageRange::kUS_437 = (int64_t)1 << 63;
8730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
8830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/******************************************************************************
8930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * struct UnicodeRange
9030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ******************************************************************************/
9130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t UnicodeRange::range(int32_t bit) {
9230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  if (bit < 0 || bit > kLast) {
9330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    return -1;
9430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  }
9530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return bit;
9630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
9730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
9830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/******************************************************************************
9930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * class OS2Table
10030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ******************************************************************************/
10130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunOS2Table::~OS2Table() {}
10230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
10330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::TableVersion() {
10430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadUShort(Offset::kVersion);
10530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
10630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
10730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::XAvgCharWidth() {
10830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kXAvgCharWidth);
10930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
11030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
11130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::UsWeightClass() {
11230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadUShort(Offset::kUsWeightClass);
11330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
11430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
11530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::UsWidthClass() {
11630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadUShort(Offset::kUsWidthClass);
11730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
11830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
11930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::FsType() {
12030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadUShort(Offset::kFsType);
12130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
12230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
12330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::YSubscriptXSize() {
12430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kYSubscriptXSize);
12530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
12630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
12730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::YSubscriptYSize() {
12830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kYSubscriptYSize);
12930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
13030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
13130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::YSubscriptXOffset() {
13230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kYSubscriptXOffset);
13330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
13430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
13530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::YSubscriptYOffset() {
13630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kYSubscriptYOffset);
13730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
13830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
13930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::YSuperscriptXSize() {
14030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kYSuperscriptXSize);
14130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
14230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
14330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::YSuperscriptYSize() {
14430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kYSuperscriptYSize);
14530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
14630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
14730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::YSuperscriptXOffset() {
14830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kYSuperscriptXOffset);
14930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
15030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
15130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::YSuperscriptYOffset() {
15230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kYSuperscriptYOffset);
15330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
15430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
15530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::YStrikeoutSize() {
15630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kYStrikeoutSize);
15730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
15830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
15930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::YStrikeoutPosition() {
16030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kYStrikeoutPosition);
16130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
16230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
16330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::SFamilyClass() {
16430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kSFamilyClass);
16530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
16630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
16730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Panose(ByteVector* value) {
16830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  assert(value);
16930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  value->clear();
17030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  value->resize(10);
17130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  data_->ReadBytes(Offset::kPanose, &((*value)[0]), 0, 10);
17230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
17330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
17430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint64_t OS2Table::UlUnicodeRange1() {
17530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadULong(Offset::kUlUnicodeRange1);
17630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
17730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
17830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint64_t OS2Table::UlUnicodeRange2() {
17930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadULong(Offset::kUlUnicodeRange2);
18030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
18130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
18230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint64_t OS2Table::UlUnicodeRange3() {
18330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadULong(Offset::kUlUnicodeRange3);
18430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
18530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
18630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint64_t OS2Table::UlUnicodeRange4() {
18730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadULong(Offset::kUlUnicodeRange4);
18830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
18930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
19030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::AchVendId(ByteVector* b) {
19130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  assert(b);
19230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  b->clear();
19330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  b->resize(4);
19430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  data_->ReadBytes(Offset::kAchVendId, &((*b)[0]), 0, 4);
19530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
19630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
19730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::FsSelection() {
19830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadUShort(Offset::kFsSelection);
19930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
20030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
20130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::UsFirstCharIndex() {
20230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadUShort(Offset::kUsFirstCharIndex);
20330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
20430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
20530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::UsLastCharIndex() {
20630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadUShort(Offset::kUsLastCharIndex);
20730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
20830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
20930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::STypoAscender() {
21030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kSTypoAscender);
21130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
21230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
21330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::STypoDescender() {
21430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kSTypoDescender);
21530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
21630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
21730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::STypoLineGap() {
21830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kSTypoLineGap);
21930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
22030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
22130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::UsWinAscent() {
22230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadUShort(Offset::kUsWinAscent);
22330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
22430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
22530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::UsWinDescent() {
22630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadUShort(Offset::kUsWinDescent);
22730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
22830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
22930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint64_t OS2Table::UlCodePageRange1() {
23030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadULong(Offset::kUlCodePageRange1);
23130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
23230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
23330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint64_t OS2Table::UlCodePageRange2() {
23430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadULong(Offset::kUlCodePageRange2);
23530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
23630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
23730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::SxHeight() {
23830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kSxHeight);
23930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
24030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
24130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::SCapHeight() {
24230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadShort(Offset::kSCapHeight);
24330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
24430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
24530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::UsDefaultChar() {
24630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadUShort(Offset::kUsDefaultChar);
24730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
24830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
24930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::UsBreakChar() {
25030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadUShort(Offset::kUsBreakChar);
25130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
25230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
25330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::UsMaxContext() {
25430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return data_->ReadUShort(Offset::kUsMaxContext);
25530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
25630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
25730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunOS2Table::OS2Table(Header* header, ReadableFontData* data)
25830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    : Table(header, data) {
25930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
26030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
26130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/******************************************************************************
26230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * class OS2Table::Builder
26330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ******************************************************************************/
26430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunOS2Table::Builder::Builder(Header* header, WritableFontData* data)
26530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    : TableBasedTableBuilder(header, data) {
26630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
26730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
26830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunOS2Table::Builder::Builder(Header* header, ReadableFontData* data)
26930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    : TableBasedTableBuilder(header, data) {
27030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
27130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
27230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunOS2Table::Builder::~Builder() {}
27330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
27430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunCALLER_ATTACH FontDataTable* OS2Table::Builder::SubBuildTable(
27530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    ReadableFontData* data) {
27630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  FontDataTablePtr table = new OS2Table(header(), data);
27730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return table.Detach();
27830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
27930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
28030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunCALLER_ATTACH OS2Table::Builder*
28130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    OS2Table::Builder::CreateBuilder(Header* header,
28230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                     WritableFontData* data) {
28330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  Ptr<OS2Table::Builder> builder;
28430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  builder = new OS2Table::Builder(header, data);
28530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return builder.Detach();
28630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
28730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
28830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::TableVersion() {
28930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadUShort(Offset::kVersion);
29030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
29130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
29230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetTableVersion(int32_t version) {
29330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteUShort(Offset::kVersion, version);
29430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
29530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
29630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::XAvgCharWidth() {
29730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kXAvgCharWidth);
29830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
29930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
30030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetXAvgCharWidth(int32_t width) {
30130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kXAvgCharWidth, width);
30230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
30330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
30430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::UsWeightClass() {
30530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadUShort(Offset::kUsWeightClass);
30630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
30730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
30830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUsWeightClass(int32_t weight) {
30930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteUShort(Offset::kUsWeightClass, weight);
31030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
31130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
31230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::UsWidthClass() {
31330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadUShort(Offset::kUsWidthClass);
31430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
31530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
31630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUsWidthClass(int32_t width) {
31730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteUShort(Offset::kUsWidthClass, width);
31830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
31930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
32030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::FsType() {
32130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadUShort(Offset::kFsType);
32230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
32330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
32430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetFsType(int32_t fs_type) {
32530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteUShort(Offset::kFsType, fs_type);
32630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
32730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
32830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::YSubscriptXSize() {
32930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kYSubscriptXSize);
33030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
33130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
33230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetYSubscriptXSize(int32_t size) {
33330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kYSubscriptXSize, size);
33430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
33530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
33630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::YSubscriptYSize() {
33730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kYSubscriptYSize);
33830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
33930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
34030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetYSubscriptYSize(int32_t size) {
34130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kYSubscriptYSize, size);
34230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
34330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
34430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::YSubscriptXOffset() {
34530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kYSubscriptXOffset);
34630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
34730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
34830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetYSubscriptXOffset(int32_t offset) {
34930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kYSubscriptXOffset, offset);
35030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
35130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
35230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::YSubscriptYOffset() {
35330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kYSubscriptYOffset);
35430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
35530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
35630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetYSubscriptYOffset(int32_t offset) {
35730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kYSubscriptYOffset, offset);
35830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
35930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
36030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::YSuperscriptXSize() {
36130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kYSuperscriptXSize);
36230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
36330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
36430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetYSuperscriptXSize(int32_t size) {
36530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kYSuperscriptXSize, size);
36630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
36730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
36830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::YSuperscriptYSize() {
36930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kYSuperscriptYSize);
37030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
37130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
37230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetYSuperscriptYSize(int32_t size) {
37330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kYSuperscriptYSize, size);
37430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
37530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
37630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::YSuperscriptXOffset() {
37730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kYSuperscriptXOffset);
37830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
37930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
38030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetYSuperscriptXOffset(int32_t offset) {
38130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kYSuperscriptXOffset, offset);
38230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
38330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
38430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::YSuperscriptYOffset() {
38530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kYSuperscriptYOffset);
38630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
38730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
38830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetYSuperscriptYOffset(int32_t offset) {
38930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kYSuperscriptYOffset, offset);
39030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
39130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
39230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::YStrikeoutSize() {
39330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kYStrikeoutSize);
39430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
39530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
39630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetYStrikeoutSize(int32_t size) {
39730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kYStrikeoutSize, size);
39830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
39930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
40030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::YStrikeoutPosition() {
40130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kYStrikeoutPosition);
40230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
40330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
40430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetYStrikeoutPosition(int32_t position) {
40530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kYStrikeoutPosition, position);
40630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
40730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
40830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::SFamilyClass() {
40930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kSFamilyClass);
41030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
41130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
41230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetSFamilyClass(int32_t family) {
41330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kSFamilyClass, family);
41430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
41530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
41630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::Panose(ByteVector* value) {
41730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  assert(value);
41830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  value->clear();
41930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  value->resize(Offset::kPanoseLength);
42030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalReadData()->ReadBytes(Offset::kPanose,
42130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                &((*value)[0]),
42230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                0,
42330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                Offset::kPanoseLength);
42430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
42530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
42630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetPanose(ByteVector* panose) {
42730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  assert(panose);
42830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  if (panose->size() != Offset::kPanoseLength) {
42930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#if !defined (SFNTLY_NO_EXCEPTION)
43030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    throw IllegalArgumentException("Panose bytes must be exactly 10 in length");
43130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif
43230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    return;
43330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  }
43430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteBytes(Offset::kPanose, panose);
43530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
43630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
43730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint64_t OS2Table::Builder::UlUnicodeRange1() {
43830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadULong(Offset::kUlUnicodeRange1);
43930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
44030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
44130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUlUnicodeRange1(int64_t range) {
44230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteULong(Offset::kUlUnicodeRange1, range);
44330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
44430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
44530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint64_t OS2Table::Builder::UlUnicodeRange2() {
44630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadULong(Offset::kUlUnicodeRange2);
44730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
44830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
44930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUlUnicodeRange2(int64_t range) {
45030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteULong(Offset::kUlUnicodeRange2, range);
45130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
45230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
45330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint64_t OS2Table::Builder::UlUnicodeRange3() {
45430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadULong(Offset::kUlUnicodeRange3);
45530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
45630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
45730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUlUnicodeRange3(int64_t range) {
45830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteULong(Offset::kUlUnicodeRange3, range);
45930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
46030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
46130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint64_t OS2Table::Builder::UlUnicodeRange4() {
46230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadULong(Offset::kUlUnicodeRange4);
46330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
46430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
46530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUlUnicodeRange4(int64_t range) {
46630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteULong(Offset::kUlUnicodeRange4, range);
46730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
46830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
46930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::AchVendId(ByteVector* b) {
47030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  assert(b);
47130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  b->clear();
47230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  b->resize(4);
47330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalReadData()->ReadBytes(Offset::kAchVendId, &((*b)[0]), 0, 4);
47430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
47530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
47630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetAchVendId(ByteVector* b) {
47730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  assert(b);
47830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  assert(b->size());
47930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteBytesPad(Offset::kAchVendId,
48030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                     b,
48130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                     0,
48230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                     std::min<size_t>(
48330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                         (size_t)Offset::kAchVendIdLength,
48430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                         b->size()),
48530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                     static_cast<byte_t>(' '));
48630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
48730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
48830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::FsSelection() {
48930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadUShort(Offset::kFsSelection);
49030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
49130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
49230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetFsSelection(int32_t fs_selection) {
49330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteUShort(Offset::kFsSelection, fs_selection);
49430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
49530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
49630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::UsFirstCharIndex() {
49730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadUShort(Offset::kUsFirstCharIndex);
49830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
49930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
50030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUsFirstCharIndex(int32_t first_index) {
50130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteUShort(Offset::kUsFirstCharIndex, first_index);
50230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
50330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
50430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::UsLastCharIndex() {
50530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadUShort(Offset::kUsLastCharIndex);
50630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
50730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
50830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUsLastCharIndex(int32_t last_index) {
50930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteUShort(Offset::kUsLastCharIndex, last_index);
51030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
51130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
51230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::STypoAscender() {
51330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kSTypoAscender);
51430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
51530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
51630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetSTypoAscender(int32_t ascender) {
51730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kSTypoAscender, ascender);
51830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
51930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
52030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::STypoDescender() {
52130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kSTypoDescender);
52230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
52330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
52430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetSTypoDescender(int32_t descender) {
52530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kSTypoDescender, descender);
52630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
52730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
52830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::STypoLineGap() {
52930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kSTypoLineGap);
53030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
53130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
53230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetSTypoLineGap(int32_t line_gap) {
53330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kSTypoLineGap, line_gap);
53430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
53530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
53630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::UsWinAscent() {
53730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadUShort(Offset::kUsWinAscent);
53830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
53930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
54030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUsWinAscent(int32_t ascent) {
54130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteUShort(Offset::kUsWinAscent, ascent);
54230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
54330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
54430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::UsWinDescent() {
54530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadUShort(Offset::kUsWinDescent);
54630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
54730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
54830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUsWinDescent(int32_t descent) {
54930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteUShort(Offset::kUsWinDescent, descent);
55030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
55130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
55230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint64_t OS2Table::Builder::UlCodePageRange1() {
55330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadULong(Offset::kUlCodePageRange1);
55430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
55530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
55630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUlCodePageRange1(int64_t range) {
55730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteULong(Offset::kUlCodePageRange1, range);
55830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
55930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
56030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint64_t OS2Table::Builder::UlCodePageRange2() {
56130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadULong(Offset::kUlCodePageRange2);
56230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
56330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
56430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUlCodePageRange2(int64_t range) {
56530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteULong(Offset::kUlCodePageRange2, range);
56630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
56730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
56830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::SxHeight() {
56930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kSxHeight);
57030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
57130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
57230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetSxHeight(int32_t height) {
57330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kSxHeight, height);
57430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
57530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
57630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::SCapHeight() {
57730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadShort(Offset::kSCapHeight);
57830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
57930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
58030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetSCapHeight(int32_t height) {
58130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteShort(Offset::kSCapHeight, height);
58230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
58330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
58430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::UsDefaultChar() {
58530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadUShort(Offset::kUsDefaultChar);
58630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
58730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
58830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUsDefaultChar(int32_t default_char) {
58930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteUShort(Offset::kUsDefaultChar, default_char);
59030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
59130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
59230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::UsBreakChar() {
59330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadUShort(Offset::kUsBreakChar);
59430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
59530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
59630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUsBreakChar(int32_t break_char) {
59730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteUShort(Offset::kUsBreakChar, break_char);
59830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
59930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
60030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint32_t OS2Table::Builder::UsMaxContext() {
60130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  return InternalReadData()->ReadUShort(Offset::kUsMaxContext);
60230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
60330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
60430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid OS2Table::Builder::SetUsMaxContext(int32_t max_context) {
60530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  InternalWriteData()->WriteUShort(Offset::kUsMaxContext, max_context);
60630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
60730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
60830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}  // namespace sfntly
609