1d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org// Use of this source code is governed by a BSD-style license that can be 3d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org// found in the LICENSE file. 4d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 5d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org#include "prep.h" 6d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 7d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org// prep - Control Value Program 8d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org// http://www.microsoft.com/opentype/otspec/prep.htm 9d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 10d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.orgnamespace ots { 11d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 12d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.orgbool ots_prep_parse(OpenTypeFile *file, const uint8_t *data, size_t length) { 13d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org Buffer table(data, length); 14d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 15d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org OpenTypePREP *prep = new OpenTypePREP; 16d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org file->prep = prep; 17d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 18d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org if (length >= 128 * 1024u) { 19d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org return OTS_FAILURE(); // almost all prep tables are less than 9k bytes. 20d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org } 21d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 22d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org if (!table.Skip(length)) { 23d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org return OTS_FAILURE(); 24d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org } 25d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 26d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org prep->data = data; 27d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org prep->length = length; 28d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org return true; 29d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org} 30d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 31d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.orgbool ots_prep_should_serialise(OpenTypeFile *file) { 32d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org if (!file->glyf) return false; // this table is not for CFF fonts. 33d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org return g_transcode_hints && file->prep; 34d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org} 35d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 36d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.orgbool ots_prep_serialise(OTSStream *out, OpenTypeFile *file) { 37d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org const OpenTypePREP *prep = file->prep; 38d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 39d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org if (!out->Write(prep->data, prep->length)) { 40d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org return OTS_FAILURE(); 41d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org } 42d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 43d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org return true; 44d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org} 45d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 46d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.orgvoid ots_prep_free(OpenTypeFile *file) { 47d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org delete file->prep; 48d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org} 49d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org 50d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org} // namespace ots 51