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 |