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