Home | History | Annotate | Download | only in src
      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.
      4 
      5 #include "fpgm.h"
      6 
      7 // fpgm - Font Program
      8 // http://www.microsoft.com/opentype/otspec/fpgm.htm
      9 
     10 namespace ots {
     11 
     12 bool ots_fpgm_parse(OpenTypeFile *file, const uint8_t *data, size_t length) {
     13   Buffer table(data, length);
     14 
     15   OpenTypeFPGM *fpgm = new OpenTypeFPGM;
     16   file->fpgm = fpgm;
     17 
     18   if (length >= 128 * 1024u) {
     19     return OTS_FAILURE();  // almost all fpgm tables are less than 5k bytes.
     20   }
     21 
     22   if (!table.Skip(length)) {
     23     return OTS_FAILURE();
     24   }
     25 
     26   fpgm->data = data;
     27   fpgm->length = length;
     28   return true;
     29 }
     30 
     31 bool ots_fpgm_should_serialise(OpenTypeFile *file) {
     32   if (!file->glyf) return false;  // this table is not for CFF fonts.
     33   return g_transcode_hints && file->fpgm;
     34 }
     35 
     36 bool ots_fpgm_serialise(OTSStream *out, OpenTypeFile *file) {
     37   const OpenTypeFPGM *fpgm = file->fpgm;
     38 
     39   if (!out->Write(fpgm->data, fpgm->length)) {
     40     return OTS_FAILURE();
     41   }
     42 
     43   return true;
     44 }
     45 
     46 void ots_fpgm_free(OpenTypeFile *file) {
     47   delete file->fpgm;
     48 }
     49 
     50 }  // namespace ots
     51