OLD | NEW |
1 #ifndef __DEFINED__SkPdfFont | 1 #ifndef __DEFINED__SkPdfFont |
2 #define __DEFINED__SkPdfFont | 2 #define __DEFINED__SkPdfFont |
3 | 3 |
4 #include "SkPdfHeaders_autogen.h" | 4 #include "SkPdfHeaders_autogen.h" |
5 #include "SkPdfMapper_autogen.h" | 5 #include "SkPdfMapper_autogen.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "SkTypeface.h" | 10 #include "SkTypeface.h" |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 fFonMatrix = dict->has_FontMatrix() ? dict->FontMatrix(parsed) : SkMatri
x::I(); | 356 fFonMatrix = dict->has_FontMatrix() ? dict->FontMatrix(parsed) : SkMatri
x::I(); |
357 | 357 |
358 if (dict->has_FontBBox()) { | 358 if (dict->has_FontBBox()) { |
359 fFontBBox = dict->FontBBox(parsed); | 359 fFontBBox = dict->FontBBox(parsed); |
360 } | 360 } |
361 | 361 |
362 fChars = new Type3FontChar[fLastChar - fFirstChar + 1]; | 362 fChars = new Type3FontChar[fLastChar - fFirstChar + 1]; |
363 | 363 |
364 memset(fChars, 0, sizeof(fChars[0]) * (fLastChar - fFirstChar + 1)); | 364 memset(fChars, 0, sizeof(fChars[0]) * (fLastChar - fFirstChar + 1)); |
365 | 365 |
366 | |
367 const SkPdfArray* widths = dict->Widths(parsed); | 366 const SkPdfArray* widths = dict->Widths(parsed); |
368 for (unsigned int i = 0 ; i < widths->size(); i++) { | 367 for (unsigned int i = 0 ; i < widths->size(); i++) { |
369 if ((fFirstChar + i) < fFirstChar || (fFirstChar + i) > fLastChar) { | 368 if ((fFirstChar + i) >= fFirstChar && (fFirstChar + i) <= fLastChar)
{ |
370 printf("break; error 1\n"); | 369 fChars[i].fWidth = (*widths)[i]->numberValue(); |
| 370 } else { |
| 371 // TODO(edisonn): report pdf corruption |
371 } | 372 } |
372 fChars[i].fWidth = (*widths)[i]->numberValue(); | |
373 } | 373 } |
374 | 374 |
375 const SkPdfArray* diffs = fEncodingDict->Differences(parsed); | 375 const SkPdfArray* diffs = fEncodingDict->Differences(parsed); |
376 unsigned int j = fFirstChar; | 376 unsigned int j = fFirstChar; |
377 for (unsigned int i = 0 ; i < diffs->size(); i++) { | 377 for (unsigned int i = 0 ; i < diffs->size(); i++) { |
378 if ((*diffs)[i]->isInteger()) { | 378 if ((*diffs)[i]->isInteger()) { |
379 j = (unsigned int)(*diffs)[i]->intValue(); | 379 j = (unsigned int)(*diffs)[i]->intValue(); |
380 } else if ((*diffs)[i]->isName()) { | 380 } else if ((*diffs)[i]->isName()) { |
381 if (j < fFirstChar || j > fLastChar) { | 381 if (j >= fFirstChar && j <= fLastChar) { |
382 printf("break; error 2\n"); | 382 fChars[j - fFirstChar].fObj = fCharProcs->get((*diffs)[i]); |
| 383 } else { |
| 384 // TODO(edisonn): report pdf corruption |
383 } | 385 } |
384 fChars[j - fFirstChar].fObj = fCharProcs->get((*diffs)[i]); | |
385 j++; | 386 j++; |
386 } else { | 387 } else { |
387 // err | 388 // TODO(edisonn): report bad pdf |
388 } | 389 } |
389 } | 390 } |
390 } | 391 } |
391 | 392 |
392 public: | 393 public: |
393 virtual double drawOneChar(unsigned int ch, SkPaint* paint, PdfContext* pdfC
ontext, SkCanvas* canvas) { | 394 virtual double drawOneChar(unsigned int ch, SkPaint* paint, PdfContext* pdfC
ontext, SkCanvas* canvas) { |
394 if (ch < fFirstChar || ch > fLastChar || !fChars[ch - fFirstChar].fObj)
{ | 395 if (ch < fFirstChar || ch > fLastChar || !fChars[ch - fFirstChar].fObj)
{ |
395 return fBaseFont->drawOneChar(ToUnicode(ch), paint, pdfContext, canv
as); | 396 return fBaseFont->drawOneChar(ToUnicode(ch), paint, pdfContext, canv
as); |
396 } | 397 } |
397 | 398 |
(...skipping 12 matching lines...) Expand all Loading... |
410 SkDoubleToScalar(0.0)); | 411 SkDoubleToScalar(0.0)); |
411 return fChars[ch - fFirstChar].fWidth; | 412 return fChars[ch - fFirstChar].fWidth; |
412 } | 413 } |
413 | 414 |
414 virtual void afterWord(SkPaint* paint, SkMatrix* matrix) { | 415 virtual void afterWord(SkPaint* paint, SkMatrix* matrix) { |
415 | 416 |
416 } | 417 } |
417 }; | 418 }; |
418 | 419 |
419 #endif // __DEFINED__SkPdfFont | 420 #endif // __DEFINED__SkPdfFont |
OLD | NEW |