diff options
Diffstat (limited to 'gfx/sfntly/cpp/src/sample/subtly/subsetter.cc')
-rw-r--r-- | gfx/sfntly/cpp/src/sample/subtly/subsetter.cc | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/gfx/sfntly/cpp/src/sample/subtly/subsetter.cc b/gfx/sfntly/cpp/src/sample/subtly/subsetter.cc new file mode 100644 index 0000000000..d09627ca35 --- /dev/null +++ b/gfx/sfntly/cpp/src/sample/subtly/subsetter.cc @@ -0,0 +1,67 @@ +/* + * Copyright 2011 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "subtly/subsetter.h" + +#include <stdio.h> + +#include "sfntly/font.h" +#include "sfntly/font_factory.h" +#include "sfntly/tag.h" +#include "subtly/character_predicate.h" +#include "subtly/font_assembler.h" +#include "subtly/font_info.h" +#include "subtly/utils.h" + +namespace subtly { +using namespace sfntly; + +/****************************************************************************** + * Subsetter class + ******************************************************************************/ +Subsetter::Subsetter(Font* font, CharacterPredicate* predicate) + : font_(font), + predicate_(predicate) { +} + +Subsetter::Subsetter(const char* font_path, CharacterPredicate* predicate) + : predicate_(predicate) { + font_.Attach(LoadFont(font_path)); +} + +CALLER_ATTACH Font* Subsetter::Subset() { + Ptr<FontSourcedInfoBuilder> info_builder = + new FontSourcedInfoBuilder(font_, 0, predicate_); + + Ptr<FontInfo> font_info; + font_info.Attach(info_builder->GetFontInfo()); + if (!font_info) { +#if defined (SUBTLY_DEBUG) + fprintf(stderr, + "Couldn't create font info. No subset will be generated.\n"); +#endif + return NULL; + } + IntegerSet* table_blacklist = new IntegerSet; + table_blacklist->insert(Tag::DSIG); + Ptr<FontAssembler> font_assembler = new FontAssembler(font_info, + table_blacklist); + Ptr<Font> font_subset; + font_subset.Attach(font_assembler->Assemble()); + delete table_blacklist; + return font_subset.Detach(); +} +} |