LCOV - code coverage report
Current view: top level - gfx/sfntly/cpp/src/sfntly/table/core - horizontal_metrics_table.cc (source / functions) Hit Total Coverage
Test: output.info Lines: 0 60 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 23 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             : #include "sfntly/table/core/horizontal_metrics_table.h"
      18             : #include "sfntly/port/exception_type.h"
      19             : 
      20             : namespace sfntly {
      21             : /******************************************************************************
      22             :  * HorizontalMetricsTable class
      23             :  ******************************************************************************/
      24           0 : HorizontalMetricsTable::~HorizontalMetricsTable() {}
      25             : 
      26           0 : int32_t HorizontalMetricsTable::NumberOfHMetrics() {
      27           0 :   return num_hmetrics_;
      28             : }
      29             : 
      30           0 : int32_t HorizontalMetricsTable::NumberOfLSBs() {
      31           0 :   return num_glyphs_ - num_hmetrics_;
      32             : }
      33             : 
      34           0 : int32_t HorizontalMetricsTable::HMetricAdvanceWidth(int32_t entry) {
      35           0 :   if (entry > num_hmetrics_) {
      36             : #if !defined (SFNTLY_NO_EXCEPTION)
      37             :     throw IndexOutOfBoundException();
      38             : #endif
      39           0 :     return 0;
      40             :   }
      41             :   int32_t offset = Offset::kHMetricsStart + (entry * Offset::kHMetricsSize) +
      42           0 :                    Offset::kHMetricsAdvanceWidth;
      43           0 :   return data_->ReadUShort(offset);
      44             : }
      45             : 
      46           0 : int32_t HorizontalMetricsTable::HMetricLSB(int32_t entry) {
      47           0 :   if (entry > num_hmetrics_) {
      48             : #if !defined (SFNTLY_NO_EXCEPTION)
      49             :     throw IndexOutOfBoundException();
      50             : #endif
      51           0 :     return 0;
      52             :   }
      53           0 :   int32_t offset = Offset::kHMetricsStart + (entry * Offset::kHMetricsSize) +
      54           0 :                    Offset::kHMetricsLeftSideBearing;
      55           0 :   return data_->ReadShort(offset);
      56             : }
      57             : 
      58           0 : int32_t HorizontalMetricsTable::LsbTableEntry(int32_t entry) {
      59           0 :   if (entry > num_hmetrics_) {
      60             : #if !defined (SFNTLY_NO_EXCEPTION)
      61             :     throw IndexOutOfBoundException();
      62             : #endif
      63           0 :     return 0;
      64             :   }
      65           0 :   int32_t offset = Offset::kHMetricsStart + (entry * Offset::kHMetricsSize) +
      66           0 :                    Offset::kLeftSideBearingSize;
      67           0 :   return data_->ReadShort(offset);
      68             : }
      69             : 
      70           0 : int32_t HorizontalMetricsTable::AdvanceWidth(int32_t glyph_id) {
      71           0 :   if (glyph_id < num_hmetrics_) {
      72           0 :     return HMetricAdvanceWidth(glyph_id);
      73             :   }
      74           0 :   return HMetricAdvanceWidth(glyph_id - num_hmetrics_);
      75             : }
      76             : 
      77           0 : int32_t HorizontalMetricsTable::LeftSideBearing(int32_t glyph_id) {
      78           0 :   if (glyph_id < num_hmetrics_) {
      79           0 :     return HMetricLSB(glyph_id);
      80             :   }
      81           0 :   return LsbTableEntry(glyph_id - num_hmetrics_);
      82             : }
      83             : 
      84           0 : HorizontalMetricsTable::HorizontalMetricsTable(Header* header,
      85             :                                                ReadableFontData* data,
      86             :                                                int32_t num_hmetrics,
      87           0 :                                                int32_t num_glyphs)
      88             :     : Table(header, data),
      89             :       num_hmetrics_(num_hmetrics),
      90           0 :       num_glyphs_(num_glyphs) {
      91           0 : }
      92             : 
      93             : /******************************************************************************
      94             :  * HorizontalMetricsTable::Builder class
      95             :  ******************************************************************************/
      96           0 : HorizontalMetricsTable::Builder::Builder(Header* header, WritableFontData* data)
      97           0 :     : TableBasedTableBuilder(header, data), num_hmetrics_(-1), num_glyphs_(-1) {
      98           0 : }
      99             : 
     100           0 : HorizontalMetricsTable::Builder::Builder(Header* header, ReadableFontData* data)
     101           0 :     : TableBasedTableBuilder(header, data), num_hmetrics_(-1), num_glyphs_(-1) {
     102           0 : }
     103             : 
     104           0 : HorizontalMetricsTable::Builder::~Builder() {}
     105             : 
     106             : CALLER_ATTACH FontDataTable*
     107           0 :     HorizontalMetricsTable::Builder::SubBuildTable(ReadableFontData* data) {
     108             :   FontDataTablePtr table =
     109           0 :       new HorizontalMetricsTable(header(), data, num_hmetrics_, num_glyphs_);
     110           0 :   return table.Detach();
     111             : }
     112             : 
     113             : CALLER_ATTACH HorizontalMetricsTable::Builder*
     114           0 :     HorizontalMetricsTable::Builder::CreateBuilder(Header* header,
     115             :                                                    WritableFontData* data) {
     116           0 :   Ptr<HorizontalMetricsTable::Builder> builder;
     117           0 :   builder = new HorizontalMetricsTable::Builder(header, data);
     118           0 :   return builder.Detach();
     119             : }
     120             : 
     121           0 : void HorizontalMetricsTable::Builder::SetNumberOfHMetrics(
     122             :     int32_t num_hmetrics) {
     123           0 :   assert(num_hmetrics >= 0);
     124           0 :   num_hmetrics_ = num_hmetrics;
     125             :   HorizontalMetricsTable* table =
     126           0 :       down_cast<HorizontalMetricsTable*>(this->GetTable());
     127           0 :   table->num_hmetrics_ = num_hmetrics;
     128           0 : }
     129             : 
     130           0 : void HorizontalMetricsTable::Builder::SetNumGlyphs(int32_t num_glyphs) {
     131           0 :   assert(num_glyphs >= 0);
     132           0 :   num_glyphs_ = num_glyphs;
     133             :   HorizontalMetricsTable* table =
     134           0 :       down_cast<HorizontalMetricsTable*>(this->GetTable());
     135           0 :   table->num_glyphs_ = num_glyphs;
     136           0 : }
     137             : 
     138             : }  // namespace sfntly

Generated by: LCOV version 1.13