LCOV - code coverage report
Current view: top level - gfx/sfntly/cpp/src/sfntly/table/bitmap - eblc_table.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 1 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 2 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2011 Google Inc. All Rights Reserved.
       3             :  *
       4             :  * Licensed under the Apache License, Version 2.0 (the "License");
       5             :  * you may not use this file except in compliance with the License.
       6             :  * You may obtain a copy of the License at
       7             :  *
       8             :  *      http://www.apache.org/licenses/LICENSE-2.0
       9             :  *
      10             :  * Unless required by applicable law or agreed to in writing, software
      11             :  * distributed under the License is distributed on an "AS IS" BASIS,
      12             :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      13             :  * See the License for the specific language governing permissions and
      14             :  * limitations under the License.
      15             :  */
      16             : 
      17             : #ifndef SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBLC_TABLE_H_
      18             : #define SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBLC_TABLE_H_
      19             : 
      20             : #include "sfntly/port/lock.h"
      21             : #include "sfntly/table/bitmap/big_glyph_metrics.h"
      22             : #include "sfntly/table/bitmap/bitmap_glyph.h"
      23             : #include "sfntly/table/bitmap/bitmap_size_table.h"
      24             : #include "sfntly/table/subtable_container_table.h"
      25             : 
      26             : namespace sfntly {
      27             : 
      28           0 : class EblcTable : public SubTableContainerTable,
      29             :                   public RefCounted<EblcTable> {
      30             :  public:
      31             :   struct Offset {
      32             :     enum {
      33             :       // header
      34             :       kVersion = 0,
      35             :       kNumSizes = 4,
      36             :       kHeaderLength = kNumSizes + DataSize::kULONG,
      37             : 
      38             :       // bitmapSizeTable
      39             :       kBitmapSizeTableArrayStart = kHeaderLength,
      40             :       kBitmapSizeTableLength = 48,
      41             :       kBitmapSizeTable_indexSubTableArrayOffset = 0,
      42             :       kBitmapSizeTable_indexTableSize = 4,
      43             :       kBitmapSizeTable_numberOfIndexSubTables = 8,
      44             :       kBitmapSizeTable_colorRef = 12,
      45             :       kBitmapSizeTable_hori = 16,
      46             :       kBitmapSizeTable_vert = 28,
      47             :       kBitmapSizeTable_startGlyphIndex = 40,
      48             :       kBitmapSizeTable_endGlyphIndex = 42,
      49             :       kBitmapSizeTable_ppemX = 44,
      50             :       kBitmapSizeTable_ppemY = 45,
      51             :       kBitmapSizeTable_bitDepth = 46,
      52             :       kBitmapSizeTable_flags = 47,
      53             : 
      54             :       // sbitLineMetrics
      55             :       kSbitLineMetricsLength = 12,
      56             :       kSbitLineMetrics_ascender = 0,
      57             :       kSbitLineMetrics_descender = 1,
      58             :       kSbitLineMetrics_widthMax = 2,
      59             :       kSbitLineMetrics_caretSlopeNumerator = 3,
      60             :       kSbitLineMetrics_caretSlopeDenominator = 4,
      61             :       kSbitLineMetrics_caretOffset = 5,
      62             :       kSbitLineMetrics_minOriginSB = 6,
      63             :       kSbitLineMetrics_minAdvanceSB = 7,
      64             :       kSbitLineMetrics_maxBeforeBL = 8,
      65             :       kSbitLineMetrics_minAfterBL = 9,
      66             :       kSbitLineMetrics_pad1 = 10,
      67             :       kSbitLineMetrics_pad2 = 11,
      68             : 
      69             :       // indexSubTable
      70             :       kIndexSubTableEntryLength = 8,
      71             :       kIndexSubTableEntry_firstGlyphIndex = 0,
      72             :       kIndexSubTableEntry_lastGlyphIndex = 2,
      73             :       kIndexSubTableEntry_additionalOffsetToIndexSubTable = 4,
      74             : 
      75             :       // indexSubHeader
      76             :       kIndexSubHeaderLength = 8,
      77             :       kIndexSubHeader_indexFormat = 0,
      78             :       kIndexSubHeader_imageFormat = 2,
      79             :       kIndexSubHeader_imageDataOffset = 4,
      80             : 
      81             :       // indexSubTable - all offset relative to the subtable start
      82             : 
      83             :       // indexSubTable1
      84             :       kIndexSubTable1_offsetArray = kIndexSubHeaderLength,
      85             :       kIndexSubTable1_builderDataSize = kIndexSubHeaderLength,
      86             : 
      87             :       // kIndexSubTable2
      88             :       kIndexSubTable2Length = kIndexSubHeaderLength +
      89             :                               DataSize::kULONG +
      90             :                               BitmapGlyph::Offset::kBigGlyphMetricsLength,
      91             :       kIndexSubTable2_imageSize = kIndexSubHeaderLength,
      92             :       kIndexSubTable2_bigGlyphMetrics = kIndexSubTable2_imageSize +
      93             :                                         DataSize::kULONG,
      94             :       kIndexSubTable2_builderDataSize = kIndexSubTable2_bigGlyphMetrics +
      95             :                                         BigGlyphMetrics::Offset::kMetricsLength,
      96             : 
      97             :       // kIndexSubTable3
      98             :       kIndexSubTable3_offsetArray = kIndexSubHeaderLength,
      99             :       kIndexSubTable3_builderDataSize = kIndexSubTable3_offsetArray,
     100             : 
     101             :       // kIndexSubTable4
     102             :       kIndexSubTable4_numGlyphs = kIndexSubHeaderLength,
     103             :       kIndexSubTable4_glyphArray = kIndexSubTable4_numGlyphs +
     104             :                                    DataSize::kULONG,
     105             :       kIndexSubTable4_codeOffsetPairLength = 2 * DataSize::kUSHORT,
     106             :       kIndexSubTable4_codeOffsetPair_glyphCode = 0,
     107             :       kIndexSubTable4_codeOffsetPair_offset = DataSize::kUSHORT,
     108             :       kIndexSubTable4_builderDataSize = kIndexSubTable4_glyphArray,
     109             : 
     110             :       // kIndexSubTable5
     111             :       kIndexSubTable5_imageSize = kIndexSubHeaderLength,
     112             :       kIndexSubTable5_bigGlyphMetrics = kIndexSubTable5_imageSize +
     113             :                                         DataSize::kULONG,
     114             :       kIndexSubTable5_numGlyphs = kIndexSubTable5_bigGlyphMetrics +
     115             :                                   BitmapGlyph::Offset::kBigGlyphMetricsLength,
     116             :       kIndexSubTable5_glyphArray = kIndexSubTable5_numGlyphs +
     117             :                                    DataSize::kULONG,
     118             :       kIndexSubTable5_builderDataSize = kIndexSubTable5_glyphArray,
     119             : 
     120             :       // codeOffsetPair
     121             :       kCodeOffsetPairLength = 2 * DataSize::kUSHORT,
     122             :       kCodeOffsetPair_glyphCode = 0,
     123             :       kCodeOffsetPair_offset = DataSize::kUSHORT,
     124             :     };
     125             :   };
     126             : 
     127             :   class Builder : public SubTableContainerTable::Builder,
     128             :                   public RefCounted<Builder> {
     129             :    public:
     130             :     // Constructor scope altered to public because C++ does not allow base
     131             :     // class to instantiate derived class with protected constructors.
     132             :     Builder(Header* header, WritableFontData* data);
     133             :     Builder(Header* header, ReadableFontData* data);
     134             :     virtual ~Builder();
     135             : 
     136             :     virtual int32_t SubSerialize(WritableFontData* new_data);
     137             :     virtual bool SubReadyToSerialize();
     138             :     virtual int32_t SubDataSizeToSerialize();
     139             :     virtual void SubDataSet();
     140             :     virtual CALLER_ATTACH FontDataTable* SubBuildTable(ReadableFontData* data);
     141             : 
     142             :     BitmapSizeTableBuilderList* BitmapSizeBuilders();
     143             :     void Revert();
     144             : 
     145             :     // Generates the loca list for the EBDT table. The list is intended to be
     146             :     // used by the EBDT to allow it to parse the glyph data and generate glyph
     147             :     // objects. After returning from this method the list belongs to the caller.
     148             :     // The list entries are in the same order as the size table builders are at
     149             :     // the time of this call.
     150             :     // @return the list of loca maps with one for each size table builder
     151             :     void GenerateLocaList(BitmapLocaList* output);
     152             : 
     153             :     // Create a new builder using the header information and data provided.
     154             :     // @param header the header information
     155             :     // @param data the data holding the table
     156             :     static CALLER_ATTACH Builder* CreateBuilder(Header* header,
     157             :                                                 WritableFontData* data);
     158             :     static CALLER_ATTACH Builder* CreateBuilder(Header* header,
     159             :                                                 ReadableFontData* data);
     160             : 
     161             :    private:
     162             :     BitmapSizeTableBuilderList* GetSizeList();
     163             :     void Initialize(ReadableFontData* data, BitmapSizeTableBuilderList* output);
     164             : 
     165             :     static const int32_t kVersion = 0x00020000;
     166             :     BitmapSizeTableBuilderList size_table_builders_;
     167             :   };
     168             : 
     169             :   int32_t Version();
     170             :   int32_t NumSizes();
     171             :   // UNIMPLEMENTED: toString()
     172             : 
     173             :   BitmapSizeTable* GetBitmapSizeTable(int32_t index);
     174             : 
     175             :   static const int32_t NOTDEF = -1;
     176             : 
     177             :  protected:
     178             :   EblcTable(Header* header, ReadableFontData* data);
     179             : 
     180             :  private:
     181             :   BitmapSizeTableList* GetBitmapSizeTableList();
     182             : 
     183             :   static void CreateBitmapSizeTable(ReadableFontData* data,
     184             :                                     int32_t num_sizes,
     185             :                                     BitmapSizeTableList* output);
     186             : 
     187             :   Lock bitmap_size_table_lock_;
     188             :   BitmapSizeTableList bitmap_size_table_;
     189             : };
     190             : typedef Ptr<EblcTable> EblcTablePtr;
     191             : typedef Ptr<EblcTable::Builder> EblcTableBuilderPtr;
     192             : }
     193             : 
     194             : #endif  // SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBLC_TABLE_H_

Generated by: LCOV version 1.13