| Index: experimental/PdfViewer/SkPdfFont.cpp
|
| ===================================================================
|
| --- experimental/PdfViewer/SkPdfFont.cpp (revision 9788)
|
| +++ experimental/PdfViewer/SkPdfFont.cpp (working copy)
|
| @@ -148,49 +148,51 @@
|
| return typeface;
|
| }
|
|
|
| -static SkPdfFont* fontFromFontDescriptor(SkPdfFontDescriptorDictionary* fd) {
|
| +SkPdfFont* SkPdfFont::fontFromFontDescriptor(SkPdfFontDescriptorDictionary* fd, bool loadFromName) {
|
| + // TODO(edisonn): partial implementation
|
| // Only one, at most be available
|
| + SkPdfStream* pdfStream = NULL;
|
| if (fd->has_FontFile()) {
|
| -
|
| + pdfStream = fd->FontFile();
|
| } else if (fd->has_FontFile2()) {
|
| - SkPdfStream* pdfStream = fd->FontFile2();
|
| -
|
| - if (!pdfStream->podofo()->GetStream()) {
|
| - // TODO(edisonn): report warning to be used in testing.
|
| - return NULL;
|
| + pdfStream = fd->FontFile2();
|
| + } if (fd->has_FontFile3()) {
|
| + pdfStream = fd->FontFile3();
|
| + } else {
|
| + if (loadFromName) {
|
| + return fontFromName(fd, fd->FontName().c_str());
|
| }
|
| + }
|
|
|
| - char* uncompressedStream = NULL;
|
| - pdf_long uncompressedStreamLength = 0;
|
| + if (!pdfStream || !pdfStream->podofo()->GetStream()) {
|
| + // TODO(edisonn): report warning to be used in testing.
|
| + return NULL;
|
| + }
|
|
|
| - // TODO(edisonn): get rid of try/catch exceptions! We should not throw on user data!
|
| - try {
|
| - pdfStream->podofo()->GetStream()->GetFilteredCopy(&uncompressedStream, &uncompressedStreamLength);
|
| - } catch (PdfError& e) {
|
| - // TODO(edisonn): report warning to be used in testing.
|
| - return NULL;
|
| - }
|
| - SkMemoryStream* skStream = new SkMemoryStream(uncompressedStream, uncompressedStreamLength);
|
| - SkTypeface* face = SkTypeface::CreateFromStream(skStream);
|
| + char* uncompressedStream = NULL;
|
| + pdf_long uncompressedStreamLength = 0;
|
|
|
| - if (face == NULL) {
|
| - // TODO(edisonn): report warning to be used in testing.
|
| - return NULL;
|
| - }
|
| + // TODO(edisonn): get rid of try/catch exceptions! We should not throw on user data!
|
| + try {
|
| + pdfStream->podofo()->GetStream()->GetFilteredCopy(&uncompressedStream, &uncompressedStreamLength);
|
| + } catch (PdfError& e) {
|
| + // TODO(edisonn): report warning to be used in testing.
|
| + return NULL;
|
| + }
|
| + SkMemoryStream* skStream = new SkMemoryStream(uncompressedStream, uncompressedStreamLength);
|
| + SkTypeface* face = SkTypeface::CreateFromStream(skStream);
|
|
|
| - face->ref();
|
| -
|
| - return new SkPdfStandardFont(face);
|
| - } if (fd->has_FontFile3()) {
|
| -
|
| - } else {
|
| -
|
| + if (face == NULL) {
|
| + // TODO(edisonn): report warning to be used in testing.
|
| + return NULL;
|
| }
|
|
|
| - return NULL;
|
| + face->ref();
|
| +
|
| + return new SkPdfStandardFont(face);
|
| }
|
|
|
| -SkPdfFont* SkPdfFontFromName(SkPdfObject* obj, const char* fontName) {
|
| +SkPdfFont* fontFromName(SkPdfObject* obj, const char* fontName) {
|
| SkTypeface* typeface = SkTypefaceFromPdfStandardFont(fontName, false, false);
|
| if (typeface != NULL) {
|
| return new SkPdfStandardFont(typeface);
|
| @@ -203,7 +205,7 @@
|
| SkPdfFontDescriptorDictionary* fd = NULL;
|
| if (mapFontDescriptorDictionary(*obj->doc(), *podofoFont, &fd)) {
|
| if (fd->has_FontName() && fd->FontName() == fontName) {
|
| - SkPdfFont* font = fontFromFontDescriptor(fd);
|
| + SkPdfFont* font = SkPdfFont::fontFromFontDescriptor(fd, false);
|
| if (font) {
|
| return font;
|
| } else {
|
| @@ -233,9 +235,6 @@
|
| case kType1FontDictionary_SkPdfObjectType:
|
| return fontFromType1FontDictionary(dict->asType1FontDictionary());
|
|
|
| - case kCIDFontDictionary_SkPdfObjectType:
|
| - return fontFromCIDFontDictionary(dict->asCIDFontDictionary());
|
| -
|
| case kMultiMasterFontDictionary_SkPdfObjectType:
|
| return fontFromMultiMasterFontDictionary(dict->asMultiMasterFontDictionary());
|
|
|
| @@ -279,14 +278,6 @@
|
| return new SkPdfTrueTypeFont(dict);
|
| }
|
|
|
| -SkPdfCIDFont* SkPdfFont::fontFromCIDFontDictionary(SkPdfCIDFontDictionary* dict) {
|
| - if (dict == NULL) {
|
| - return NULL; // default one?
|
| - }
|
| -
|
| - return new SkPdfCIDFont(dict);
|
| -}
|
| -
|
| SkPdfMultiMasterFont* SkPdfFont::fontFromMultiMasterFontDictionary(SkPdfMultiMasterFontDictionary* dict) {
|
| if (dict == NULL) {
|
| return NULL; // default one?
|
| @@ -396,7 +387,7 @@
|
|
|
|
|
| SkPdfType0Font::SkPdfType0Font(SkPdfType0FontDictionary* dict) {
|
| - fBaseFont = SkPdfFontFromName(dict, dict->BaseFont().c_str());
|
| + fBaseFont = fontFromName(dict, dict->BaseFont().c_str());
|
| fEncoding = NULL;
|
|
|
| if (dict->has_Encoding()) {
|
|
|