summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordfilimon@google.com <dfilimon@google.com@672e30a5-4c29-85ac-ac6d-611c735e0a51>2011-08-29 17:13:42 +0000
committerdfilimon@google.com <dfilimon@google.com@672e30a5-4c29-85ac-ac6d-611c735e0a51>2011-08-29 17:13:42 +0000
commit6c4f92bcc799598f6fcba4b3c7d4d549da9a8491 (patch)
treed09e057e85bea39026b29b868a54cfa2590af3f7
parent5af34fd773f8cfee82321393504f558ddf67c628 (diff)
downloadsrc-6c4f92bcc799598f6fcba4b3c7d4d549da9a8491.tar.gz
Modified NewTableBuilder so it would no longer require CALLER_ATTACH.
git-svn-id: http://sfntly.googlecode.com/svn/trunk/cpp/src@60 672e30a5-4c29-85ac-ac6d-611c735e0a51
-rw-r--r--sfntly/font.cc32
-rw-r--r--sfntly/font.h6
-rw-r--r--sfntly/tools/subsetter/glyph_table_subsetter.cc12
-rw-r--r--sfntly/tools/subsetter/subsetter.cc7
-rw-r--r--test/subsetter_impl.cc17
5 files changed, 37 insertions, 37 deletions
diff --git a/sfntly/font.cc b/sfntly/font.cc
index 14f1505..d66c9f6 100644
--- a/sfntly/font.cc
+++ b/sfntly/font.cc
@@ -16,9 +16,12 @@
#include "sfntly/font.h"
+#include <stdio.h>
+
#include <functional>
#include <algorithm>
#include <map>
+#include <string>
#include <typeinfo>
#include "sfntly/data/font_input_stream.h"
@@ -280,19 +283,21 @@ Table::Builder* Font::Builder::GetTableBuilder(int32_t tag) {
return NULL;
}
-CALLER_ATTACH Table::Builder* Font::Builder::NewTableBuilder(int32_t tag) {
+Table::Builder* Font::Builder::NewTableBuilder(int32_t tag) {
TableHeaderPtr header = new Table::Header(tag);
- TableBuilderPtr builder = Table::Builder::GetBuilder(this, header, NULL);
+ TableBuilderPtr builder;
+ builder.Attach(Table::Builder::GetBuilder(this, header, NULL));
table_builders_.insert(TableBuilderEntry(header->tag(), builder));
return builder;
}
-CALLER_ATTACH Table::Builder*
- Font::Builder::NewTableBuilder(int32_t tag, ReadableFontData* src_data) {
+Table::Builder* Font::Builder::NewTableBuilder(int32_t tag,
+ ReadableFontData* src_data) {
WritableFontDataPtr data;
data.Attach(GetNewGrowableData(src_data));
TableHeaderPtr header = new Table::Header(tag);
- TableBuilderPtr builder = Table::Builder::GetBuilder(this, header, data);
+ TableBuilderPtr builder;
+ builder.Attach(Table::Builder::GetBuilder(this, header, data));
table_builders_.insert(TableBuilderEntry(tag, builder));
return builder;
}
@@ -369,7 +374,7 @@ void Font::Builder::BuildTablesFromBuilders(TableBuilderMap* builder_map,
// Now build all the tables.
for (TableBuilderMap::iterator builder = builder_map->begin(),
builder_end = builder_map->end();
- builder != builder_end; ++builder) {
+ builder != builder_end; ++builder) {
TablePtr table;
if (builder->second && builder->second->ReadyToBuild()) {
#if !defined (SFNTLY_NO_EXCEPTION)
@@ -379,19 +384,26 @@ void Font::Builder::BuildTablesFromBuilders(TableBuilderMap* builder_map,
#if !defined (SFNTLY_NO_EXCEPTION)
} catch(IOException& e) {
std::string builder_string = "Unable to build table - ";
- builder_string += typeid(builder->second).name();
- builder_string += e.what();
+ char *table_name = TagToString(builder->first);
+ builder_string += table_name;
+ delete[] table_name;
throw RuntimeException(builder_string.c_str());
}
#endif
}
if (table == NULL) {
+ std::string builder_string = "Unable to build table - ";
+ char *table_name = TagToString(builder->first);
+ builder_string += table_name;
+ delete[] table_name;
#if defined (SFNTLY_NO_EXCEPTION)
+#if defined (SFNTLY_DEBUG)
+ fprintf(stderr, "Aborting table construction: %s\n",
+ builder_string.c_str());
+#endif
table_map->clear();
return;
#else
- std::string builder_string = "Unable to build table - ";
- builder_string += typeid(builder->second).name();
throw RuntimeException(builder_string.c_str());
#endif
}
diff --git a/sfntly/font.h b/sfntly/font.h
index 72b10ac..2badece 100644
--- a/sfntly/font.h
+++ b/sfntly/font.h
@@ -150,9 +150,9 @@ class Font : public RefCounted<Font> {
// builder for that table.
// @return new empty table of the type specified by tag; if tag is not known
// then a generic OpenTypeTable is returned
- virtual CALLER_ATTACH Table::Builder* NewTableBuilder(int32_t tag);
- virtual CALLER_ATTACH Table::Builder*
- NewTableBuilder(int32_t tag, ReadableFontData* src_data);
+ virtual Table::Builder* NewTableBuilder(int32_t tag);
+ virtual Table::Builder* NewTableBuilder(int32_t tag,
+ ReadableFontData* src_data);
virtual TableBuilderMap* table_builders() { return &table_builders_; }
virtual void TableBuilderTags(IntegerSet* key_set);
// Note: different from Java: we don't return object in removeTableBuilder
diff --git a/sfntly/tools/subsetter/glyph_table_subsetter.cc b/sfntly/tools/subsetter/glyph_table_subsetter.cc
index 76f8624..644e137 100644
--- a/sfntly/tools/subsetter/glyph_table_subsetter.cc
+++ b/sfntly/tools/subsetter/glyph_table_subsetter.cc
@@ -53,12 +53,12 @@ bool GlyphTableSubsetter::Subset(Subsetter* subsetter,
#endif
}
- GlyphTableBuilderPtr glyph_table_builder;
- glyph_table_builder.Attach(down_cast<GlyphTable::Builder*>(
- font_builder->NewTableBuilder(Tag::glyf)));
- LocaTableBuilderPtr loca_table_builder;
- loca_table_builder.Attach(down_cast<LocaTable::Builder*>(
- font_builder->NewTableBuilder(Tag::loca)));
+ GlyphTableBuilderPtr glyph_table_builder =
+ down_cast<GlyphTable::Builder*>
+ (font_builder->NewTableBuilder(Tag::glyf));
+ LocaTableBuilderPtr loca_table_builder =
+ down_cast<LocaTable::Builder*>
+ (font_builder->NewTableBuilder(Tag::loca));
if (glyph_table_builder == NULL || loca_table_builder == NULL) {
#if defined (SFNTLY_NO_EXCEPTION)
return false;
diff --git a/sfntly/tools/subsetter/subsetter.cc b/sfntly/tools/subsetter/subsetter.cc
index c234a1e..d1b64d9 100644
--- a/sfntly/tools/subsetter/subsetter.cc
+++ b/sfntly/tools/subsetter/subsetter.cc
@@ -85,12 +85,7 @@ CALLER_ATTACH Font::Builder* Subsetter::Subset() {
tag_end = table_tags.end(); tag != tag_end; ++tag) {
Table* table = font_->GetTable(*tag);
if (table) {
- // The NewTableBuilder() call will alter internal state of font_builder
- // AND the reference count of returned object. Therefore we need to
- // dereference it.
- TableBuilderPtr dereference;
- dereference.Attach(
- font_builder->NewTableBuilder(*tag, table->ReadFontData()));
+ font_builder->NewTableBuilder(*tag, table->ReadFontData());
}
}
return font_builder.Detach();
diff --git a/test/subsetter_impl.cc b/test/subsetter_impl.cc
index ea886c0..572f00e 100644
--- a/test/subsetter_impl.cc
+++ b/test/subsetter_impl.cc
@@ -274,12 +274,10 @@ CALLER_ATTACH Font* SubsetterImpl::Subset(const IntegerSet& glyph_ids) {
FontBuilderPtr font_builder;
font_builder.Attach(factory_->NewFontBuilder());
- GlyphTableBuilderPtr glyph_table_builder;
- glyph_table_builder.Attach(down_cast<GlyphTable::Builder*>(
- font_builder->NewTableBuilder(Tag::glyf)));
- LocaTableBuilderPtr loca_table_builder;
- loca_table_builder.Attach(down_cast<LocaTable::Builder*>(
- font_builder->NewTableBuilder(Tag::loca)));
+ GlyphTableBuilderPtr glyph_table_builder =
+ down_cast<GlyphTable::Builder*>(font_builder->NewTableBuilder(Tag::glyf));
+ LocaTableBuilderPtr loca_table_builder =
+ down_cast<LocaTable::Builder*>(font_builder->NewTableBuilder(Tag::loca));
if (glyph_table_builder == NULL || loca_table_builder == NULL) {
// Out of memory.
return NULL;
@@ -328,12 +326,7 @@ CALLER_ATTACH Font* SubsetterImpl::Subset(const IntegerSet& glyph_ids) {
e = font_->Tables()->end(); i != e; ++i) {
// We already build the builder for glyph and loca.
if (i->first != Tag::glyf && i->first != Tag::loca) {
- // The newTableBuilder() call will alter internal state of font_builder
- // AND the reference count of returned object. Therefore we need to
- // dereference it.
- TableBuilderPtr dereference;
- dereference.Attach(
- font_builder->NewTableBuilder(i->first, i->second->ReadFontData()));
+ font_builder->NewTableBuilder(i->first, i->second->ReadFontData());
}
}