12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright 2011 Google Inc. All Rights Reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * you may not use this file except in compliance with the License. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * You may obtain a copy of the License at 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS, 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See the License for the specific language governing permissions and 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * limitations under the License. 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_INDEX_SUBTABLE_FORMAT3_H_ 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_INDEX_SUBTABLE_FORMAT3_H_ 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "sfntly/table/bitmap/index_sub_table.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace sfntly { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Format 3 Index Subtable Entry. 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class IndexSubTableFormat3 : public IndexSubTable, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public RefCounted<IndexSubTableFormat3> { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Builder : public IndexSubTable::Builder, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public RefCounted<Builder> { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class BitmapGlyphInfoIterator 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public RefIterator<BitmapGlyphInfo, Builder, IndexSubTable::Builder> { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit BitmapGlyphInfoIterator(Builder* container); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BitmapGlyphInfoIterator() {} 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool HasNext(); 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CALLER_ATTACH virtual BitmapGlyphInfo* Next(); 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int32_t glyph_id_; 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~Builder(); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual int32_t NumGlyphs(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int32_t GlyphStartOffset(int32_t glyph_id); 463240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual int32_t GlyphLength(int32_t glyph_id); 473240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch CALLER_ATTACH virtual BitmapGlyphInfoIterator* GetIterator(); 483240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 493240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual CALLER_ATTACH FontDataTable* SubBuildTable(ReadableFontData* data); 503240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual void SubDataSet(); 513240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual int32_t SubDataSizeToSerialize(); 523240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual bool SubReadyToSerialize(); 533240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual int32_t SubSerialize(WritableFontData* new_data); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetOffsetArray(const IntegerList& offset_array); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static CALLER_ATTACH Builder* CreateBuilder(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static CALLER_ATTACH Builder* CreateBuilder(ReadableFontData* data, 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t index_sub_table_offset, 603240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch int32_t first_glyph_index, 613240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch int32_t last_glyph_index); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static CALLER_ATTACH Builder* CreateBuilder(WritableFontData* data, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t index_sub_table_offset, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t first_glyph_index, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t last_glyph_index); 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Revert(); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 703240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch private: 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Builder(); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Builder(WritableFontData* data, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t first_glyph_index, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t last_glyph_index); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Builder(ReadableFontData* data, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t first_glyph_index, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t last_glyph_index); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IntegerList* GetOffsetArray(); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Initialize(ReadableFontData* data); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static int32_t DataLength(ReadableFontData* data, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t index_sub_table_offset, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t first_glyph_index, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t last_glyph_index); 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) IntegerList offset_array_; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~IndexSubTableFormat3(); 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual int32_t NumGlyphs(); 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual int32_t GlyphStartOffset(int32_t glyph_id); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int32_t GlyphLength(int32_t glyph_id); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int32_t GetDataLength(ReadableFontData* data, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t offset, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t first, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t last); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IndexSubTableFormat3(ReadableFontData* data, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t first_glyph_index, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t last_glyph_index); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t Loca(int32_t loca_index); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) friend class Builder; 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)typedef Ptr<IndexSubTableFormat3> IndexSubTableFormat3Ptr; 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)typedef Ptr<IndexSubTableFormat3::Builder> IndexSubTableFormat3BuilderPtr; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace sfntly 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_INDEX_SUBTABLE_FORMAT3_H_ 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)