LCOV - code coverage report
Current view: top level - gfx/sfntly/cpp/src/sfntly/table/truetype - loca_table.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 3 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 4 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_TRUETYPE_LOCA_TABLE_H_
      18             : #define SFNTLY_CPP_SRC_SFNTLY_TABLE_TRUETYPE_LOCA_TABLE_H_
      19             : 
      20             : #include "sfntly/port/java_iterator.h"
      21             : #include "sfntly/table/table.h"
      22             : #include "sfntly/table/core/font_header_table.h"
      23             : 
      24             : namespace sfntly {
      25             : 
      26             : // A Loca table - 'loca'.
      27             : class LocaTable : public Table, public RefCounted<LocaTable> {
      28             :  public:
      29             :   class LocaIterator : public PODIterator<int32_t, LocaTable> {
      30             :    public:
      31             :     explicit LocaIterator(LocaTable* table);
      32           0 :     virtual ~LocaIterator() {}
      33             : 
      34             :     virtual bool HasNext();
      35             :     virtual int32_t Next();
      36             : 
      37             :    private:
      38             :     int32_t index_;
      39             :   };
      40             : 
      41             :   class Builder : public Table::Builder, public RefCounted<Builder> {
      42             :    public:
      43             :     // Constructor scope altered to public for base class to instantiate.
      44             :     Builder(Header* header, WritableFontData* data);
      45             :     Builder(Header* header, ReadableFontData* data);
      46             :     virtual ~Builder();
      47             : 
      48             :     static CALLER_ATTACH Builder* CreateBuilder(Header* header,
      49             :                                                 WritableFontData* data);
      50             : 
      51             :     // Get the format version that will be used when the loca table is
      52             :     // generated.
      53             :     // @return the loca table format version
      54             :     int32_t format_version() { return format_version_; }
      55           0 :     void set_format_version(int32_t value) { format_version_ = value; }
      56             : 
      57             :     // Gets the List of locas for loca table builder. These may be manipulated
      58             :     // in any way by the caller and the changes will be reflected in the final
      59             :     // loca table produced as long as no subsequent call is made to the
      60             :     // SetLocaList(List) method.
      61             :     // If there is no current data for the loca table builder or the loca list
      62             :     // have not been previously set then this will return an empty List.
      63             :     IntegerList* LocaList();
      64             : 
      65             :     // Set the list of locas to be used for building this table. If any existing
      66             :     // list was already retrieved with the LocaList() method then the
      67             :     // connection of that previous list to this builder will be broken.
      68             :     void SetLocaList(IntegerList* list);
      69             : 
      70             :     // Return the offset for the given glyph id. Valid glyph ids are from 0 to
      71             :     // one less than the number of glyphs. The zero entry is the special entry
      72             :     // for the notdef glyph. The final entry beyond the last glyph id is used to
      73             :     // calculate the size of the last glyph.
      74             :     // @param glyphId the glyph id to get the offset for; must be less than or
      75             :     //        equal to one more than the number of glyph ids
      76             :     // @return the offset in the glyph table to the specified glyph id
      77             :     int32_t GlyphOffset(int32_t glyph_id);
      78             : 
      79             :     // Get the length of the data in the glyph table for the specified glyph id.
      80             :     int32_t GlyphLength(int32_t glyph_id);
      81             : 
      82             :     // Set the number of glyphs.
      83             :     // This method sets the number of glyphs that the builder will attempt to
      84             :     // parse location data for from the raw binary data. This method only needs
      85             :     // to be called (and <b>must</b> be) when the raw data for this builder has
      86             :     // been changed. It does not by itself reset the data or clear any set loca
      87             :     // list.
      88             :     void SetNumGlyphs(int32_t num_glyphs);
      89             : 
      90             :     // Get the number of glyphs that this builder has support for.
      91             :     int NumGlyphs();
      92             : 
      93             :     // Revert the loca table builder to the state contained in the last raw data
      94             :     // set on the builder. That raw data may be that read from a font file when
      95             :     // the font builder was created, that set by a user of the loca table
      96             :     // builder, or null data if this builder was created as a new empty builder.
      97             :     void Revert();
      98             : 
      99             :     // Get the number of locations or locas. This will be one more than the
     100             :     // number of glyphs for this table since the last loca position is used to
     101             :     // indicate the size of the final glyph.
     102             :     int32_t NumLocas();
     103             : 
     104             :     // Get the value from the loca table for the index specified. These are the
     105             :     // raw values from the table that are used to compute the offset and size of
     106             :     // a glyph in the glyph table. Valid index values run from 0 to the number
     107             :     // of glyphs in the font.
     108             :     int32_t Loca(int32_t index);
     109             : 
     110             :     virtual CALLER_ATTACH FontDataTable* SubBuildTable(ReadableFontData* data);
     111             :     virtual void SubDataSet();
     112             :     virtual int32_t SubDataSizeToSerialize();
     113             :     virtual bool SubReadyToSerialize();
     114             :     virtual int32_t SubSerialize(WritableFontData* new_data);
     115             : 
     116             :    private:
     117             :     // Initialize the internal state from the data. Done lazily since in many
     118             :     // cases the builder will be just creating a table object with no parsing
     119             :     // required.
     120             :     // @param data the data to initialize from
     121             :     void Initialize(ReadableFontData* data);
     122             : 
     123             :     // Checks that the glyph id is within the correct range.
     124             :     // @return glyph_id if correct, -1 otherwise.
     125             :     int32_t CheckGlyphRange(int32_t glyph_id);
     126             : 
     127             :     int32_t LastGlyphIndex();
     128             : 
     129             :     // Internal method to get the loca list if already generated and if not to
     130             :     // initialize the state of the builder.
     131             :     // @return the loca list
     132             :     IntegerList* GetLocaList();
     133             : 
     134             :     void ClearLoca(bool nullify);
     135             : 
     136             :     int32_t format_version_;  // Note: IndexToLocFormat
     137             :     int32_t num_glyphs_;
     138             :     IntegerList loca_;
     139             :   };
     140             : 
     141             :   virtual ~LocaTable();
     142             : 
     143             :   int32_t format_version() { return format_version_; }
     144           0 :   int32_t num_glyphs() { return num_glyphs_; }
     145             : 
     146             :   // Return the offset for the given glyph id. Valid glyph ids are from 0 to the
     147             :   // one less than the number of glyphs. The zero entry is the special entry for
     148             :   // the notdef glyph. The final entry beyond the last glyph id is used to
     149             :   // calculate the size of the last glyph.
     150             :   // @param glyphId the glyph id to get the offset for; must be less than or
     151             :   //        equal to one more than the number of glyph ids
     152             :   // @return the offset in the glyph table to the specified glyph id
     153             :   int32_t GlyphOffset(int32_t glyph_id);
     154             : 
     155             :   // Get the length of the data in the glyph table for the specified glyph id.
     156             :   int32_t GlyphLength(int32_t glyph_id);
     157             : 
     158             :   // Get the number of locations or locas. This will be one more than the number
     159             :   // of glyphs for this table since the last loca position is used to indicate
     160             :   // the size of the final glyph.
     161             :   int32_t NumLocas();
     162             : 
     163             :   // Get the value from the loca table for the index specified. Valid index
     164             :   // values run from 0 to the number of glyphs in the font.
     165             :   int32_t Loca(int32_t index);
     166             : 
     167             :  private:
     168             :   LocaTable(Header* header,
     169             :             ReadableFontData* data,
     170             :             int32_t format_version,
     171             :             int32_t num_glyphs);
     172             : 
     173             :   int32_t format_version_;  // Note: Java's version, renamed to format_version_
     174             :   int32_t num_glyphs_;
     175             : 
     176             :   friend class LocaIterator;
     177             : };
     178             : typedef Ptr<LocaTable> LocaTablePtr;
     179             : typedef Ptr<LocaTable::Builder> LocaTableBuilderPtr;
     180             : 
     181             : }  // namespace sfntly
     182             : 
     183             : #endif  // SFNTLY_CPP_SRC_SFNTLY_TABLE_TRUETYPE_LOCA_TABLE_H_

Generated by: LCOV version 1.13