1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
8 // http://www.microsoft.com/typography/otspec/fpgm.htm
10 #define TABLE_NAME "fpgm"
14 bool ots_fpgm_parse(OpenTypeFile
*file
, const uint8_t *data
, size_t length
) {
15 Buffer
table(data
, length
);
17 OpenTypeFPGM
*fpgm
= new OpenTypeFPGM
;
20 if (length
>= 128 * 1024u) {
21 return OTS_FAILURE_MSG("length (%ld) > 120", length
); // almost all fpgm tables are less than 5k bytes.
24 if (!table
.Skip(length
)) {
25 return OTS_FAILURE_MSG("Bad fpgm length");
29 fpgm
->length
= length
;
33 bool ots_fpgm_should_serialise(OpenTypeFile
*file
) {
34 if (!file
->glyf
) return false; // this table is not for CFF fonts.
35 return file
->fpgm
!= NULL
;
38 bool ots_fpgm_serialise(OTSStream
*out
, OpenTypeFile
*file
) {
39 const OpenTypeFPGM
*fpgm
= file
->fpgm
;
41 if (!out
->Write(fpgm
->data
, fpgm
->length
)) {
42 return OTS_FAILURE_MSG("Failed to write fpgm");
48 void ots_fpgm_free(OpenTypeFile
*file
) {