diff options
Diffstat (limited to 'sfntly/table/table.cc')
-rw-r--r-- | sfntly/table/table.cc | 134 |
1 files changed, 13 insertions, 121 deletions
diff --git a/sfntly/table/table.cc b/sfntly/table/table.cc index 10276aa..7183d38 100644 --- a/sfntly/table/table.cc +++ b/sfntly/table/table.cc @@ -18,6 +18,8 @@ #include "sfntly/font.h" #include "sfntly/tag.h" +#include "sfntly/table/bitmap/ebdt_table.h" +#include "sfntly/table/bitmap/eblc_table.h" #include "sfntly/table/core/cmap_table.h" #include "sfntly/table/core/font_header_table.h" #include "sfntly/table/core/horizontal_header_table.h" @@ -25,6 +27,7 @@ #include "sfntly/table/core/maximum_profile_table.h" #include "sfntly/table/core/name_table.h" #include "sfntly/table/core/os2_table.h" +#include "sfntly/table/table_based_table_builder.h" #include "sfntly/table/truetype/glyph_table.h" #include "sfntly/table/truetype/loca_table.h" @@ -49,54 +52,6 @@ Table::Table(Header* header, ReadableFontData* data) } /****************************************************************************** - * Table::Header class - ******************************************************************************/ -Table::Header::Header(int32_t tag) - : tag_(tag), - offset_(0), - offset_valid_(false), - length_(0), - length_valid_(false), - checksum_(0), - checksum_valid_(false) { -} - -Table::Header::Header(int32_t tag, int32_t length) - : tag_(tag), - offset_(0), - offset_valid_(false), - length_(length), - length_valid_(true), - checksum_(0), - checksum_valid_(false) { -} - -Table::Header::Header(int32_t tag, - int64_t checksum, - int32_t offset, - int32_t length) - : tag_(tag), - offset_(offset), - offset_valid_(true), - length_(length), - length_valid_(true), - checksum_(checksum), - checksum_valid_(true) { -} - -Table::Header::~Header() {} - -bool HeaderComparatorByOffset::operator() (const TableHeaderPtr lhs, - const TableHeaderPtr rhs) { - return lhs->offset_ > rhs->offset_; -} - -bool HeaderComparatorByTag::operator() (const TableHeaderPtr lhs, - const TableHeaderPtr rhs) { - return lhs->tag_ > rhs->tag_; -} - -/****************************************************************************** * Table::Builder class ******************************************************************************/ Table::Builder::~Builder() { @@ -155,12 +110,21 @@ Table::Builder* Table::Builder::GetBuilder(Header* header, }/* else if (tag == Tag::prep) { builder_raw = static_cast<Table::Builder*>( ControlProgramTable::Builder::CreateBuilder(header, table_data)); + }*/ else if (tag == Tag::EBDT || tag == Tag::bdat) { + builder_raw = static_cast<Table::Builder*>( + EbdtTable::Builder::CreateBuilder(header, table_data)); + } else if (tag == Tag::EBLC || tag == Tag::bloc) { + builder_raw = static_cast<Table::Builder*>( + EblcTable::Builder::CreateBuilder(header, table_data)); + }/* else if (tag == Tag::EBSC) { + builder_raw = static_cast<Table::Builder*>( + EbscTable::Builder::CreateBuilder(header, table_data)); }*/ else if (tag == Tag::bhed) { builder_raw = static_cast<Table::Builder*>( FontHeaderTable::Builder::CreateBuilder(header, table_data)); } else { builder_raw = static_cast<Table::Builder*>( - Table::GenericTableBuilder::CreateBuilder(header, table_data)); + GenericTableBuilder::CreateBuilder(header, table_data)); } return builder_raw; @@ -180,76 +144,4 @@ Table::Builder::Builder(Header* header) { header_ = header; } -/****************************************************************************** - * Table::TableBasedTableBuilder class - ******************************************************************************/ -Table::TableBasedTableBuilder::~TableBasedTableBuilder() {} - -int32_t Table::TableBasedTableBuilder::SubSerialize(WritableFontData* data) { - UNREFERENCED_PARAMETER(data); - return 0; -} - -bool Table::TableBasedTableBuilder::SubReadyToSerialize() { - return false; -} - -int32_t Table::TableBasedTableBuilder::SubDataSizeToSerialize() { - return 0; -} - -void Table::TableBasedTableBuilder::SubDataSet() { - table_ = NULL; -} - -CALLER_ATTACH FontDataTable* Table::TableBasedTableBuilder::Build() { - FontDataTablePtr table = static_cast<FontDataTable*>(GetTable()); - return table.Detach(); -} - -Table::TableBasedTableBuilder::TableBasedTableBuilder(Header* header, - WritableFontData* data) - : Builder(header, data) { -} - -Table::TableBasedTableBuilder::TableBasedTableBuilder(Header* header, - ReadableFontData* data) - : Builder(header, data) { -} - -Table::TableBasedTableBuilder::TableBasedTableBuilder(Header* header) - : Builder(header) { -} - -Table* Table::TableBasedTableBuilder::GetTable() { - if (table_ == NULL) { - table_.Attach(down_cast<Table*>(SubBuildTable(InternalReadData()))); - } - return table_; -} - -/****************************************************************************** - * Table::GenericTableBuilder class - ******************************************************************************/ -Table::GenericTableBuilder::GenericTableBuilder(Header* header, - WritableFontData* data) - : TableBasedTableBuilder(header, data) { -} - -CALLER_ATTACH FontDataTable* - Table::GenericTableBuilder::SubBuildTable(ReadableFontData* data) { - // Note: In C++ port, we use GenericTable, the ref-counted version of Table - UNREFERENCED_PARAMETER(data); - FontDataTablePtr table = new GenericTable(this->header(), InternalReadData()); - return table.Detach(); -} - -CALLER_ATTACH Table::GenericTableBuilder* - Table::GenericTableBuilder::CreateBuilder(Header* header, - WritableFontData* data) { - Ptr<Table::GenericTableBuilder> builder = - new Table::GenericTableBuilder(header, data); - return builder.Detach(); -} - } // namespace sfntly |