1464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com/* 2464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * Copyright 2011 Google Inc. All Rights Reserved. 3464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * 4464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * Licensed under the Apache License, Version 2.0 (the "License"); 5464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * you may not use this file except in compliance with the License. 6464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * You may obtain a copy of the License at 7464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * 8464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * http://www.apache.org/licenses/LICENSE-2.0 9464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * 10464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * Unless required by applicable law or agreed to in writing, software 11464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * distributed under the License is distributed on an "AS IS" BASIS, 12464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * See the License for the specific language governing permissions and 14464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * limitations under the License. 15464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com */ 16464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com 175af34fd773f8cfee82321393504f558ddf67c628arthurhsu@google.com#ifndef SFNTLY_CPP_SRC_SFNTLY_TABLE_SUBTABLE_H_ 185af34fd773f8cfee82321393504f558ddf67c628arthurhsu@google.com#define SFNTLY_CPP_SRC_SFNTLY_TABLE_SUBTABLE_H_ 19464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com 205af34fd773f8cfee82321393504f558ddf67c628arthurhsu@google.com#include "sfntly/table/font_data_table.h" 21464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com 22464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comnamespace sfntly { 23464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com 24464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com// An abstract base class for subtables. Subtables are smaller tables nested 25464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com// within other tables and don't have an entry in the main font index. Examples 26464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com// of these are the CMap subtables within CMap table (cmap) or a glyph within 27464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com// the glyph table (glyf). 28464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comclass SubTable : public FontDataTable { 29464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com public: 30464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com class Builder : public FontDataTable::Builder { 31246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com public: 32246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com virtual ~Builder(); 33246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com 34464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com protected: 35333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com // @param data the data for the subtable being built 36333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com // @param master_data the data for the full table 3753847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com Builder(int32_t data_size); 38333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com Builder(WritableFontData* data, ReadableFontData* master_data); 39333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com Builder(ReadableFontData* data, ReadableFontData* master_data); 40333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com explicit Builder(WritableFontData* data); 41333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com explicit Builder(ReadableFontData* data); 42333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 43333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com ReadableFontData* master_read_data() { return master_data_; } 44333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 45333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com private: 46333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com ReadableFontDataPtr master_data_; 47464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com }; 48246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com 49246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com virtual ~SubTable(); 50be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com virtual int32_t Padding() { return padding_; } 51246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com 52333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com // Sets the amount of padding that is part of the data being used by this 53333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com // subtable. 54b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com void set_padding(int32_t padding) { padding_ = padding; } 55b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com 56246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com protected: 57333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com SubTable(ReadableFontData* data, ReadableFontData* master_data); 58333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 59246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com // Note: constructor refactored in C++ to avoid heavy lifting. 60246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com // caller need to do data->Slice(offset, length) beforehand. 61246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com explicit SubTable(ReadableFontData* data); 62b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com 63333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com ReadableFontData* master_read_data() { return master_data_; } 64333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 65b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com private: 66333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com // The data for the whole table in which this subtable is contained. 67333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com ReadableFontDataPtr master_data_; 68b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com int32_t padding_; 69464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}; 70464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com 71464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com} // namespace sfntly 72464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com 735af34fd773f8cfee82321393504f558ddf67c628arthurhsu@google.com#endif // SFNTLY_CPP_SRC_SFNTLY_TABLE_SUBTABLE_H_ 74