/* * 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(); } }