Home | History | Annotate | Download | only in core
      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_CORE_MAXIMUM_PROFILE_TABLE_H_
     18 #define SFNTLY_CPP_SRC_SFNTLY_TABLE_CORE_MAXIMUM_PROFILE_TABLE_H_
     19 
     20 #include "sfntly/port/refcount.h"
     21 #include "sfntly/table/table.h"
     22 #include "sfntly/table/table_based_table_builder.h"
     23 
     24 namespace sfntly {
     25 
     26 // A Maximum Profile table - 'maxp'.
     27 class MaximumProfileTable : public Table,
     28                             public RefCounted<MaximumProfileTable> {
     29  public:
     30   // Builder for a Maximum Profile table - 'maxp'.
     31   class Builder : public TableBasedTableBuilder, public RefCounted<Builder> {
     32    public:
     33     // Constructor scope altered to public because C++ does not allow base
     34     // class to instantiate derived class with protected constructors.
     35     Builder(Header* header, WritableFontData* data);
     36     Builder(Header* header, ReadableFontData* data);
     37     virtual ~Builder();
     38 
     39     virtual CALLER_ATTACH FontDataTable* SubBuildTable(ReadableFontData* data);
     40     static CALLER_ATTACH Builder* CreateBuilder(Header* header,
     41                                                 WritableFontData* data);
     42 
     43     int32_t TableVersion();
     44     void SetTableVersion(int32_t version);
     45     int32_t NumGlyphs();
     46     void SetNumGlyphs(int32_t num_glyphs);
     47     int32_t MaxPoints();
     48     void SetMaxPoints(int32_t max_points);
     49     int32_t MaxContours();
     50     void SetMaxContours(int32_t max_contours);
     51     int32_t MaxCompositePoints();
     52     void SetMaxCompositePoints(int32_t max_composite_points);
     53     int32_t MaxCompositeContours();
     54     void SetMaxCompositeContours(int32_t max_composite_contours);
     55     int32_t MaxZones();
     56     void SetMaxZones(int32_t max_zones);
     57     int32_t MaxTwilightPoints();
     58     void SetMaxTwilightPoints(int32_t max_twilight_points);
     59     int32_t MaxStorage();
     60     void SetMaxStorage(int32_t max_storage);
     61     int32_t MaxFunctionDefs();
     62     void SetMaxFunctionDefs(int32_t max_function_defs);
     63     int32_t MaxStackElements();
     64     void SetMaxStackElements(int32_t max_stack_elements);
     65     int32_t MaxSizeOfInstructions();
     66     void SetMaxSizeOfInstructions(int32_t max_size_of_instructions);
     67     int32_t MaxComponentElements();
     68     void SetMaxComponentElements(int32_t max_component_elements);
     69     int32_t MaxComponentDepth();
     70     void SetMaxComponentDepth(int32_t max_component_depth);
     71   };
     72 
     73   virtual ~MaximumProfileTable();
     74   int32_t TableVersion();
     75   int32_t NumGlyphs();
     76   int32_t MaxPoints();
     77   int32_t MaxContours();
     78   int32_t MaxCompositePoints();
     79   int32_t MaxCompositeContours();
     80   int32_t MaxZones();
     81   int32_t MaxTwilightPoints();
     82   int32_t MaxStorage();
     83   int32_t MaxFunctionDefs();
     84   int32_t MaxStackElements();
     85   int32_t MaxSizeOfInstructions();
     86   int32_t MaxComponentElements();
     87   int32_t MaxComponentDepth();
     88 
     89  private:
     90   struct Offset {
     91     enum {
     92       // version 0.5 and 1.0
     93       kVersion = 0,
     94       kNumGlyphs = 4,
     95 
     96       // version 1.0
     97       kMaxPoints = 6,
     98       kMaxContours = 8,
     99       kMaxCompositePoints = 10,
    100       kMaxCompositeContours = 12,
    101       kMaxZones = 14,
    102       kMaxTwilightPoints = 16,
    103       kMaxStorage = 18,
    104       kMaxFunctionDefs = 20,
    105       kMaxInstructionDefs = 22,
    106       kMaxStackElements = 24,
    107       kMaxSizeOfInstructions = 26,
    108       kMaxComponentElements = 28,
    109       kMaxComponentDepth = 30,
    110     };
    111   };
    112 
    113   MaximumProfileTable(Header* header, ReadableFontData* data);
    114 };
    115 typedef Ptr<MaximumProfileTable> MaximumProfileTablePtr;
    116 typedef Ptr<MaximumProfileTable::Builder> MaximumProfileTableBuilderPtr;
    117 
    118 }  // namespace sfntly
    119 
    120 #endif  // SFNTLY_CPP_SRC_SFNTLY_TABLE_CORE_MAXIMUM_PROFILE_TABLE_H_
    121