Line data Source code
1 : /*
2 : * Copyright 2011 Google Inc. All Rights Reserved.
3 : *
4 : * Licensed under the Apache License, Version 2.0 (the "License");
5 : * you may not use this file except in compliance with the License.
6 : * You may obtain a copy of the License at
7 : *
8 : * http://www.apache.org/licenses/LICENSE-2.0
9 : *
10 : * Unless required by applicable law or agreed to in writing, software
11 : * distributed under the License is distributed on an "AS IS" BASIS,
12 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 : * See the License for the specific language governing permissions and
14 : * limitations under the License.
15 : */
16 :
17 : #include "sfntly/table/core/font_header_table.h"
18 :
19 : namespace sfntly {
20 : /******************************************************************************
21 : * FontHeaderTable class
22 : ******************************************************************************/
23 0 : FontHeaderTable::~FontHeaderTable() {}
24 :
25 0 : int32_t FontHeaderTable::TableVersion() {
26 0 : return data_->ReadFixed(Offset::kTableVersion);
27 : }
28 :
29 0 : int32_t FontHeaderTable::FontRevision() {
30 0 : return data_->ReadFixed(Offset::kFontRevision);
31 : }
32 :
33 0 : int64_t FontHeaderTable::ChecksumAdjustment() {
34 0 : return data_->ReadULong(Offset::kCheckSumAdjustment);
35 : }
36 :
37 0 : int64_t FontHeaderTable::MagicNumber() {
38 0 : return data_->ReadULong(Offset::kMagicNumber);
39 : }
40 :
41 0 : int32_t FontHeaderTable::FlagsAsInt() {
42 0 : return data_->ReadUShort(Offset::kFlags);
43 : }
44 :
45 0 : int32_t FontHeaderTable::UnitsPerEm() {
46 0 : return data_->ReadUShort(Offset::kUnitsPerEm);
47 : }
48 :
49 0 : int64_t FontHeaderTable::Created() {
50 0 : return data_->ReadDateTimeAsLong(Offset::kCreated);
51 : }
52 :
53 0 : int64_t FontHeaderTable::Modified() {
54 0 : return data_->ReadDateTimeAsLong(Offset::kModified);
55 : }
56 :
57 0 : int32_t FontHeaderTable::XMin() {
58 0 : return data_->ReadUShort(Offset::kXMin);
59 : }
60 :
61 0 : int32_t FontHeaderTable::YMin() {
62 0 : return data_->ReadUShort(Offset::kYMin);
63 : }
64 :
65 0 : int32_t FontHeaderTable::XMax() {
66 0 : return data_->ReadUShort(Offset::kXMax);
67 : }
68 :
69 0 : int32_t FontHeaderTable::YMax() {
70 0 : return data_->ReadUShort(Offset::kYMax);
71 : }
72 :
73 0 : int32_t FontHeaderTable::MacStyleAsInt() {
74 0 : return data_->ReadUShort(Offset::kMacStyle);
75 : }
76 :
77 0 : int32_t FontHeaderTable::LowestRecPPEM() {
78 0 : return data_->ReadUShort(Offset::kLowestRecPPEM);
79 : }
80 :
81 0 : int32_t FontHeaderTable::FontDirectionHint() {
82 0 : return data_->ReadShort(Offset::kFontDirectionHint);
83 : }
84 :
85 0 : int32_t FontHeaderTable::IndexToLocFormat() {
86 0 : return data_->ReadShort(Offset::kIndexToLocFormat);
87 : }
88 :
89 0 : int32_t FontHeaderTable::GlyphDataFormat() {
90 0 : return data_->ReadShort(Offset::kGlyphDataFormat);
91 : }
92 :
93 0 : FontHeaderTable::FontHeaderTable(Header* header, ReadableFontData* data)
94 0 : : Table(header, data) {
95 0 : IntegerList checksum_ranges;
96 0 : checksum_ranges.push_back(0);
97 0 : checksum_ranges.push_back(Offset::kCheckSumAdjustment);
98 0 : checksum_ranges.push_back(Offset::kMagicNumber);
99 0 : data_->SetCheckSumRanges(checksum_ranges);
100 0 : }
101 :
102 : /******************************************************************************
103 : * FontHeaderTable::Builder class
104 : ******************************************************************************/
105 0 : FontHeaderTable::Builder::Builder(Header* header, WritableFontData* data)
106 0 : : TableBasedTableBuilder(header, data) {
107 0 : }
108 :
109 0 : FontHeaderTable::Builder::Builder(Header* header, ReadableFontData* data)
110 0 : : TableBasedTableBuilder(header, data) {
111 0 : }
112 :
113 0 : FontHeaderTable::Builder::~Builder() {}
114 :
115 0 : CALLER_ATTACH FontDataTable* FontHeaderTable::Builder::SubBuildTable(
116 : ReadableFontData* data) {
117 0 : FontDataTablePtr table = new FontHeaderTable(header(), data);
118 0 : return table.Detach();
119 : }
120 :
121 0 : int32_t FontHeaderTable::Builder::TableVersion() {
122 0 : return down_cast<FontHeaderTable*>(GetTable())->TableVersion();
123 : }
124 :
125 0 : void FontHeaderTable::Builder::SetTableVersion(int32_t version) {
126 0 : InternalWriteData()->WriteFixed(Offset::kTableVersion, version);
127 0 : }
128 :
129 0 : int32_t FontHeaderTable::Builder::FontRevision() {
130 0 : return down_cast<FontHeaderTable*>(GetTable())->FontRevision();
131 : }
132 :
133 0 : void FontHeaderTable::Builder::SetFontRevision(int32_t revision) {
134 0 : InternalWriteData()->WriteFixed(Offset::kFontRevision, revision);
135 0 : }
136 :
137 0 : int64_t FontHeaderTable::Builder::ChecksumAdjustment() {
138 0 : return down_cast<FontHeaderTable*>(GetTable())->ChecksumAdjustment();
139 : }
140 :
141 0 : void FontHeaderTable::Builder::SetChecksumAdjustment(int64_t adjustment) {
142 0 : InternalWriteData()->WriteULong(Offset::kCheckSumAdjustment, adjustment);
143 0 : }
144 :
145 0 : int64_t FontHeaderTable::Builder::MagicNumber() {
146 0 : return down_cast<FontHeaderTable*>(GetTable())->MagicNumber();
147 : }
148 :
149 0 : void FontHeaderTable::Builder::SetMagicNumber(int64_t magic_number) {
150 0 : InternalWriteData()->WriteULong(Offset::kMagicNumber, magic_number);
151 0 : }
152 :
153 0 : int32_t FontHeaderTable::Builder::FlagsAsInt() {
154 0 : return down_cast<FontHeaderTable*>(GetTable())->FlagsAsInt();
155 : }
156 :
157 0 : void FontHeaderTable::Builder::SetFlagsAsInt(int32_t flags) {
158 0 : InternalWriteData()->WriteUShort(Offset::kFlags, flags);
159 0 : }
160 :
161 0 : int32_t FontHeaderTable::Builder::UnitsPerEm() {
162 0 : return down_cast<FontHeaderTable*>(GetTable())->UnitsPerEm();
163 : }
164 :
165 0 : void FontHeaderTable::Builder::SetUnitsPerEm(int32_t units) {
166 0 : InternalWriteData()->WriteUShort(Offset::kUnitsPerEm, units);
167 0 : }
168 :
169 0 : int64_t FontHeaderTable::Builder::Created() {
170 0 : return down_cast<FontHeaderTable*>(GetTable())->Created();
171 : }
172 :
173 0 : void FontHeaderTable::Builder::SetCreated(int64_t date) {
174 0 : InternalWriteData()->WriteDateTime(Offset::kCreated, date);
175 0 : }
176 :
177 0 : int64_t FontHeaderTable::Builder::Modified() {
178 0 : return down_cast<FontHeaderTable*>(GetTable())->Modified();
179 : }
180 :
181 0 : void FontHeaderTable::Builder::SetModified(int64_t date) {
182 0 : InternalWriteData()->WriteDateTime(Offset::kModified, date);
183 0 : }
184 :
185 0 : int32_t FontHeaderTable::Builder::XMin() {
186 0 : return down_cast<FontHeaderTable*>(GetTable())->XMin();
187 : }
188 :
189 0 : void FontHeaderTable::Builder::SetXMin(int32_t xmin) {
190 0 : InternalWriteData()->WriteShort(Offset::kXMin, xmin);
191 0 : }
192 :
193 0 : int32_t FontHeaderTable::Builder::YMin() {
194 0 : return down_cast<FontHeaderTable*>(GetTable())->YMin();
195 : }
196 :
197 0 : void FontHeaderTable::Builder::SetYMin(int32_t ymin) {
198 0 : InternalWriteData()->WriteShort(Offset::kYMin, ymin);
199 0 : }
200 :
201 0 : int32_t FontHeaderTable::Builder::XMax() {
202 0 : return down_cast<FontHeaderTable*>(GetTable())->XMax();
203 : }
204 :
205 0 : void FontHeaderTable::Builder::SetXMax(int32_t xmax) {
206 0 : InternalWriteData()->WriteShort(Offset::kXMax, xmax);
207 0 : }
208 :
209 0 : int32_t FontHeaderTable::Builder::YMax() {
210 0 : return down_cast<FontHeaderTable*>(GetTable())->YMax();
211 : }
212 :
213 0 : void FontHeaderTable::Builder::SetYMax(int32_t ymax) {
214 0 : InternalWriteData()->WriteShort(Offset::kYMax, ymax);
215 0 : }
216 :
217 0 : int32_t FontHeaderTable::Builder::MacStyleAsInt() {
218 0 : return down_cast<FontHeaderTable*>(GetTable())->MacStyleAsInt();
219 : }
220 :
221 0 : void FontHeaderTable::Builder::SetMacStyleAsInt(int32_t style) {
222 0 : InternalWriteData()->WriteUShort(Offset::kMacStyle, style);
223 0 : }
224 :
225 0 : int32_t FontHeaderTable::Builder::LowestRecPPEM() {
226 0 : return down_cast<FontHeaderTable*>(GetTable())->LowestRecPPEM();
227 : }
228 :
229 0 : void FontHeaderTable::Builder::SetLowestRecPPEM(int32_t size) {
230 0 : InternalWriteData()->WriteUShort(Offset::kLowestRecPPEM, size);
231 0 : }
232 :
233 0 : int32_t FontHeaderTable::Builder::FontDirectionHint() {
234 0 : return down_cast<FontHeaderTable*>(GetTable())->FontDirectionHint();
235 : }
236 :
237 0 : void FontHeaderTable::Builder::SetFontDirectionHint(int32_t hint) {
238 0 : InternalWriteData()->WriteShort(Offset::kFontDirectionHint, hint);
239 0 : }
240 :
241 0 : int32_t FontHeaderTable::Builder::IndexToLocFormat() {
242 0 : Table* table = GetTable();
243 0 : if (!table)
244 0 : return IndexToLocFormat::kInvalidOffset;
245 0 : return down_cast<FontHeaderTable*>(table)->IndexToLocFormat();
246 : }
247 :
248 0 : void FontHeaderTable::Builder::SetIndexToLocFormat(int32_t format) {
249 0 : InternalWriteData()->WriteShort(Offset::kIndexToLocFormat, format);
250 0 : }
251 :
252 0 : int32_t FontHeaderTable::Builder::GlyphDataFormat() {
253 0 : return down_cast<FontHeaderTable*>(GetTable())->GlyphDataFormat();
254 : }
255 :
256 0 : void FontHeaderTable::Builder::SetGlyphDataFormat(int32_t format) {
257 0 : InternalWriteData()->WriteShort(Offset::kGlyphDataFormat, format);
258 0 : }
259 :
260 : CALLER_ATTACH FontHeaderTable::Builder*
261 0 : FontHeaderTable::Builder::CreateBuilder(Header* header,
262 : WritableFontData* data) {
263 0 : Ptr<FontHeaderTable::Builder> builder;
264 0 : builder = new FontHeaderTable::Builder(header, data);
265 0 : return builder.Detach();
266 : }
267 :
268 : } // namespace sfntly
|