| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright 2013 Google Inc. | |
| 3 * | |
| 4 * Use of this source code is governed by a BSD-style license that can be | |
| 5 * found in the LICENSE file. | |
| 6 */ | |
| 7 | |
| 8 #ifndef SkPdfUtils_DEFINED | |
| 9 #define SkPdfUtils_DEFINED | |
| 10 | |
| 11 #include "SkMatrix.h" | |
| 12 #include "SkRect.h" | |
| 13 #include "SkPdfConfig.h" | |
| 14 #include "SkString.h" | |
| 15 | |
| 16 class SkPdfArray; | |
| 17 class SkPdfContext; | |
| 18 class SkCanvas; | |
| 19 class SkPdfNativeObject; | |
| 20 | |
| 21 // TODO(edisonn): temporary code, to report how much of the PDF we actually thin
k we rendered. | |
| 22 enum SkPdfResult { | |
| 23 kOK_SkPdfResult, | |
| 24 kPartial_SkPdfResult, | |
| 25 kNYI_SkPdfResult, | |
| 26 kIgnoreError_SkPdfResult, | |
| 27 kError_SkPdfResult, | |
| 28 kUnsupported_SkPdfResult, | |
| 29 | |
| 30 kCount_SkPdfResult | |
| 31 }; | |
| 32 | |
| 33 // In order to operate fast, when we parse the pdf, we try not to allocate many
new strings, | |
| 34 // and if possible we refer the string in the pdf stream. | |
| 35 struct NotOwnedString { | |
| 36 const unsigned char* fBuffer; | |
| 37 // TODO(edisonn): clean up, the last two bytes are used to signal if compres
sion is used | |
| 38 size_t fBytes; | |
| 39 | |
| 40 static void init(NotOwnedString* str) { | |
| 41 str->fBuffer = NULL; | |
| 42 str->fBytes = 0; | |
| 43 } | |
| 44 | |
| 45 static void init(NotOwnedString* str, const char* sz) { | |
| 46 str->fBuffer = (const unsigned char*)sz; | |
| 47 str->fBytes = strlen(sz); | |
| 48 } | |
| 49 | |
| 50 bool equals(const char* sz) { | |
| 51 return strncmp((const char*)fBuffer, sz, fBytes) == 0 && fBytes == strle
n(sz); | |
| 52 | |
| 53 } | |
| 54 }; | |
| 55 | |
| 56 SkMatrix SkMatrixFromPdfMatrix(double array[6]); | |
| 57 | |
| 58 // TODO(edisonn): hack to make code generation simpler. Alternatively we can upd
ate the | |
| 59 // generate_code.py not to rely on != operator | |
| 60 bool operator !=(const SkString& first, const char* second); | |
| 61 | |
| 62 SkMatrix SkMatrixFromPdfArray(SkPdfArray* pdfArray); | |
| 63 | |
| 64 SkPdfResult doType3Char(SkPdfContext* pdfContext, SkCanvas* canvas, const SkPdfN
ativeObject* skobj, | |
| 65 SkRect bBox, SkMatrix matrix, double textSize); | |
| 66 | |
| 67 ////////////////////////////////////////////////////////////////////////////////
//////////////////// | |
| 68 // | |
| 69 // TRACE functions | |
| 70 // | |
| 71 #ifdef PDF_TRACE | |
| 72 void SkTraceMatrix(const SkMatrix& matrix, const char* sz); | |
| 73 void SkTraceRect(const SkRect& rect, const char* sz); | |
| 74 #else | |
| 75 #define SkTraceMatrix(a,b) | |
| 76 #define SkTraceRect(a,b) | |
| 77 #endif | |
| 78 | |
| 79 #ifdef PDF_TRACE_TOKENIZER | |
| 80 | |
| 81 static void TRACE_COMMENT(char ch) { | |
| 82 printf("%c", ch); | |
| 83 } | |
| 84 | |
| 85 static void TRACE_TK(char ch) { | |
| 86 printf("%c", ch); | |
| 87 } | |
| 88 | |
| 89 static void TRACE_NAME(const unsigned char* start, const unsigned char* end) { | |
| 90 while (start < end) { | |
| 91 printf("%c", *start); | |
| 92 start++; | |
| 93 } | |
| 94 printf("\n"); | |
| 95 } | |
| 96 | |
| 97 static void TRACE_STRING(const unsigned char* start, const unsigned char* end) { | |
| 98 while (start < end) { | |
| 99 printf("%c", *start); | |
| 100 start++; | |
| 101 } | |
| 102 printf("\n"); | |
| 103 } | |
| 104 | |
| 105 static void TRACE_HEXSTRING(const unsigned char* start, const unsigned char* end
) { | |
| 106 while (start < end) { | |
| 107 printf("%c", *start); | |
| 108 start++; | |
| 109 } | |
| 110 printf("\n"); | |
| 111 } | |
| 112 | |
| 113 #else | |
| 114 #define TRACE_COMMENT(ch) | |
| 115 #define TRACE_TK(ch) | |
| 116 #define TRACE_NAME(start,end) | |
| 117 #define TRACE_STRING(start,end) | |
| 118 #define TRACE_HEXSTRING(start,end) | |
| 119 #endif | |
| 120 | |
| 121 #endif // SkPdfUtils_DEFINED | |
| OLD | NEW |