130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/*
230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Copyright 2011 Google Inc. All Rights Reserved.
330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *
430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Licensed under the Apache License, Version 2.0 (the "License");
530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * you may not use this file except in compliance with the License.
630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * You may obtain a copy of the License at
730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *
830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *      http://www.apache.org/licenses/LICENSE-2.0
930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *
1030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Unless required by applicable law or agreed to in writing, software
1130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * distributed under the License is distributed on an "AS IS" BASIS,
1230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * See the License for the specific language governing permissions and
1430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * limitations under the License.
1530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun */
1630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
1730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifndef SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBLC_TABLE_H_
1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#define SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBLC_TABLE_H_
1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/port/lock.h"
2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/bitmap/big_glyph_metrics.h"
2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/bitmap/bitmap_glyph.h"
2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/bitmap/bitmap_size_table.h"
2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/subtable_container_table.h"
2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace sfntly {
2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunclass EblcTable : public SubTableContainerTable,
2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                  public RefCounted<EblcTable> {
3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun public:
3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  struct Offset {
3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    enum {
3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // header
3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kVersion = 0,
3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kNumSizes = 4,
3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kHeaderLength = kNumSizes + DataSize::kULONG,
3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // bitmapSizeTable
3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTableArrayStart = kHeaderLength,
4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTableLength = 48,
4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTable_indexSubTableArrayOffset = 0,
4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTable_indexTableSize = 4,
4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTable_numberOfIndexSubTables = 8,
4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTable_colorRef = 12,
4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTable_hori = 16,
4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTable_vert = 28,
4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTable_startGlyphIndex = 40,
4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTable_endGlyphIndex = 42,
4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTable_ppemX = 44,
5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTable_ppemY = 45,
5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTable_bitDepth = 46,
5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kBitmapSizeTable_flags = 47,
5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // sbitLineMetrics
5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kSbitLineMetricsLength = 12,
5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kSbitLineMetrics_ascender = 0,
5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kSbitLineMetrics_descender = 1,
5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kSbitLineMetrics_widthMax = 2,
5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kSbitLineMetrics_caretSlopeNumerator = 3,
6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kSbitLineMetrics_caretSlopeDenominator = 4,
6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kSbitLineMetrics_caretOffset = 5,
6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kSbitLineMetrics_minOriginSB = 6,
6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kSbitLineMetrics_minAdvanceSB = 7,
6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kSbitLineMetrics_maxBeforeBL = 8,
6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kSbitLineMetrics_minAfterBL = 9,
6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kSbitLineMetrics_pad1 = 10,
6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kSbitLineMetrics_pad2 = 11,
6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // indexSubTable
7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTableEntryLength = 8,
7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTableEntry_firstGlyphIndex = 0,
7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTableEntry_lastGlyphIndex = 2,
7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTableEntry_additionalOffsetToIndexSubTable = 4,
7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // indexSubHeader
7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubHeaderLength = 8,
7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubHeader_indexFormat = 0,
7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubHeader_imageFormat = 2,
7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubHeader_imageDataOffset = 4,
8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // indexSubTable - all offset relative to the subtable start
8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // indexSubTable1
8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable1_offsetArray = kIndexSubHeaderLength,
8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable1_builderDataSize = kIndexSubHeaderLength,
8630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
8730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // kIndexSubTable2
8830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable2Length = kIndexSubHeaderLength +
8930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                              DataSize::kULONG +
9030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                              BitmapGlyph::Offset::kBigGlyphMetricsLength,
9130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable2_imageSize = kIndexSubHeaderLength,
9230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable2_bigGlyphMetrics = kIndexSubTable2_imageSize +
9330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                        DataSize::kULONG,
9430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable2_builderDataSize = kIndexSubTable2_bigGlyphMetrics +
9530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                        BigGlyphMetrics::Offset::kMetricsLength,
9630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
9730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // kIndexSubTable3
9830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable3_offsetArray = kIndexSubHeaderLength,
9930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable3_builderDataSize = kIndexSubTable3_offsetArray,
10030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
10130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // kIndexSubTable4
10230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable4_numGlyphs = kIndexSubHeaderLength,
10330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable4_glyphArray = kIndexSubTable4_numGlyphs +
10430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                   DataSize::kULONG,
10530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable4_codeOffsetPairLength = 2 * DataSize::kUSHORT,
10630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable4_codeOffsetPair_glyphCode = 0,
10730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable4_codeOffsetPair_offset = DataSize::kUSHORT,
10830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable4_builderDataSize = kIndexSubTable4_glyphArray,
10930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
11030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // kIndexSubTable5
11130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable5_imageSize = kIndexSubHeaderLength,
11230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable5_bigGlyphMetrics = kIndexSubTable5_imageSize +
11330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                        DataSize::kULONG,
11430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable5_numGlyphs = kIndexSubTable5_bigGlyphMetrics +
11530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                  BitmapGlyph::Offset::kBigGlyphMetricsLength,
11630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable5_glyphArray = kIndexSubTable5_numGlyphs +
11730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                   DataSize::kULONG,
11830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kIndexSubTable5_builderDataSize = kIndexSubTable5_glyphArray,
11930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
12030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      // codeOffsetPair
12130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kCodeOffsetPairLength = 2 * DataSize::kUSHORT,
12230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kCodeOffsetPair_glyphCode = 0,
12330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      kCodeOffsetPair_offset = DataSize::kUSHORT,
12430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    };
12530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  };
12630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
12730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  class Builder : public SubTableContainerTable::Builder,
12830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                  public RefCounted<Builder> {
12930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun   public:
13030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // Constructor scope altered to public because C++ does not allow base
13130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // class to instantiate derived class with protected constructors.
13230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    Builder(Header* header, WritableFontData* data);
13330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    Builder(Header* header, ReadableFontData* data);
13430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    virtual ~Builder();
13530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
13630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    virtual int32_t SubSerialize(WritableFontData* new_data);
13730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    virtual bool SubReadyToSerialize();
13830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    virtual int32_t SubDataSizeToSerialize();
13930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    virtual void SubDataSet();
14030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    virtual CALLER_ATTACH FontDataTable* SubBuildTable(ReadableFontData* data);
14130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
14230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    BitmapSizeTableBuilderList* BitmapSizeBuilders();
14330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    void Revert();
14430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
14530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // Generates the loca list for the EBDT table. The list is intended to be
14630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // used by the EBDT to allow it to parse the glyph data and generate glyph
14730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // objects. After returning from this method the list belongs to the caller.
14830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // The list entries are in the same order as the size table builders are at
14930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // the time of this call.
15030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // @return the list of loca maps with one for each size table builder
15130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    void GenerateLocaList(BitmapLocaList* output);
15230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
15330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // Create a new builder using the header information and data provided.
15430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // @param header the header information
15530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    // @param data the data holding the table
15630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    static CALLER_ATTACH Builder* CreateBuilder(Header* header,
15730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                                WritableFontData* data);
15830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    static CALLER_ATTACH Builder* CreateBuilder(Header* header,
15930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                                ReadableFontData* data);
16030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
16130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun   private:
16230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    BitmapSizeTableBuilderList* GetSizeList();
16330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    void Initialize(ReadableFontData* data, BitmapSizeTableBuilderList* output);
16430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
16530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    static const int32_t kVersion = 0x00020000;
16630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    BitmapSizeTableBuilderList size_table_builders_;
16730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  };
16830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
16930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  int32_t Version();
17030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  int32_t NumSizes();
17130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  // UNIMPLEMENTED: toString()
17230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
17330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  BitmapSizeTable* GetBitmapSizeTable(int32_t index);
17430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
17530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  static const int32_t NOTDEF = -1;
17630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
17730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun protected:
17830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  EblcTable(Header* header, ReadableFontData* data);
17930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
18030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun private:
18130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  BitmapSizeTableList* GetBitmapSizeTableList();
18230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
18330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  static void CreateBitmapSizeTable(ReadableFontData* data,
18430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                    int32_t num_sizes,
18530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                    BitmapSizeTableList* output);
18630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
18730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  Lock bitmap_size_table_lock_;
18830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  BitmapSizeTableList bitmap_size_table_;
18930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun};
19030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Guruntypedef Ptr<EblcTable> EblcTablePtr;
19130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Guruntypedef Ptr<EblcTable::Builder> EblcTableBuilderPtr;
19230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
19330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
19430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif  // SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBLC_TABLE_H_
195