16b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com/* 26b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * Copyright 2011 Google Inc. All Rights Reserved. 36b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * 46b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * Licensed under the Apache License, Version 2.0 (the "License"); 56b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * you may not use this file except in compliance with the License. 66b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * You may obtain a copy of the License at 76b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * 86b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * http://www.apache.org/licenses/LICENSE-2.0 96b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * 106b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * Unless required by applicable law or agreed to in writing, software 116b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * distributed under the License is distributed on an "AS IS" BASIS, 126b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * See the License for the specific language governing permissions and 146b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * limitations under the License. 156b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com */ 166b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 176b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com#ifndef SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_INDEX_SUBTABLE_FORMAT3_H_ 186b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com#define SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_INDEX_SUBTABLE_FORMAT3_H_ 196b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 206b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com#include "sfntly/table/bitmap/index_sub_table.h" 216b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 226b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comnamespace sfntly { 23333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com// Format 3 Index Subtable Entry. 246b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comclass IndexSubTableFormat3 : public IndexSubTable, 256b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com public RefCounted<IndexSubTableFormat3> { 266b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com public: 27333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com class Builder : public IndexSubTable::Builder, 28333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com public RefCounted<Builder> { 29333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com public: 30333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com class BitmapGlyphInfoIterator 31333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com : public RefIterator<BitmapGlyphInfo, Builder, IndexSubTable::Builder> { 32333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com public: 33333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com explicit BitmapGlyphInfoIterator(Builder* container); 34333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com virtual ~BitmapGlyphInfoIterator() {} 35333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 36333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com virtual bool HasNext(); 37333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com CALLER_ATTACH virtual BitmapGlyphInfo* Next(); 38333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 39333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com private: 40333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t glyph_id_; 41333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com }; 42333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 43333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com virtual ~Builder(); 44333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com virtual int32_t NumGlyphs(); 45333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com virtual int32_t GlyphStartOffset(int32_t glyph_id); 46333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com virtual int32_t GlyphLength(int32_t glyph_id); 47be87cfe77f08387d23cabc3a403fa53531b687a8arthurhsu@google.com CALLER_ATTACH virtual BitmapGlyphInfoIterator* GetIterator(); 48333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 49333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com virtual CALLER_ATTACH FontDataTable* SubBuildTable(ReadableFontData* data); 50333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com virtual void SubDataSet(); 51333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com virtual int32_t SubDataSizeToSerialize(); 52333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com virtual bool SubReadyToSerialize(); 53333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com virtual int32_t SubSerialize(WritableFontData* new_data); 54333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 55333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com void SetOffsetArray(const IntegerList& offset_array); 56333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 5753847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com static CALLER_ATTACH Builder* CreateBuilder(); 58333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com static CALLER_ATTACH Builder* CreateBuilder(ReadableFontData* data, 59333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t index_sub_table_offset, 60333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t first_glyph_index, 61333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t last_glyph_index); 62333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com static CALLER_ATTACH Builder* CreateBuilder(WritableFontData* data, 63333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t index_sub_table_offset, 64333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t first_glyph_index, 65333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t last_glyph_index); 66333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 67333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com protected: 68333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com void Revert(); 69333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 70333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com private: 7153847b66af7e0c1af9928e4da2e978ed3b7c2a25arthurhsu@google.com Builder(); 72333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com Builder(WritableFontData* data, 73333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t first_glyph_index, 74333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t last_glyph_index); 75333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com Builder(ReadableFontData* data, 76333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t first_glyph_index, 77333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t last_glyph_index); 78333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com IntegerList* GetOffsetArray(); 79333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com void Initialize(ReadableFontData* data); 80333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 81333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com static int32_t DataLength(ReadableFontData* data, 82333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t index_sub_table_offset, 83333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t first_glyph_index, 84333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t last_glyph_index); 85333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 86333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com IntegerList offset_array_; 87333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com }; 886b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 896b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com virtual ~IndexSubTableFormat3(); 906b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 916b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com virtual int32_t NumGlyphs(); 92333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com virtual int32_t GlyphStartOffset(int32_t glyph_id); 936b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com virtual int32_t GlyphLength(int32_t glyph_id); 946b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 95333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com static int32_t GetDataLength(ReadableFontData* data, 96333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t offset, 97333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t first, 98333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t last); 99333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 1006b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com private: 101333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com IndexSubTableFormat3(ReadableFontData* data, 102333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t first_glyph_index, 103333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com int32_t last_glyph_index); 1046b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com int32_t Loca(int32_t loca_index); 105333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 106333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com friend class Builder; 1076b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com}; 108333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comtypedef Ptr<IndexSubTableFormat3> IndexSubTableFormat3Ptr; 109333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comtypedef Ptr<IndexSubTableFormat3::Builder> IndexSubTableFormat3BuilderPtr; 1106b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 1116b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com} // namespace sfntly 1126b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 1136b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com#endif // SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_INDEX_SUBTABLE_FORMAT3_H_ 114