blob: d05580fa4f3e8c9af8f8ca0f63656bb847fd9ad1 [file] [log] [blame]
edisonn@google.comcf2cfa12013-08-21 16:31:37 +00001/*
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
edisonn@google.comb857a0c2013-06-25 20:45:40 +000010
edisonn@google.com3aa35552013-08-14 18:26:20 +000011#include "SkMatrix.h"
12#include "SkRect.h"
edisonn@google.com33f11b62013-08-14 21:35:27 +000013#include "SkPdfConfig.h"
edisonn@google.com063d7072013-08-16 15:05:08 +000014#include "SkString.h"
edisonn@google.comb857a0c2013-06-25 20:45:40 +000015
edisonn@google.comb857a0c2013-06-25 20:45:40 +000016class SkPdfArray;
edisonn@google.com3aa35552013-08-14 18:26:20 +000017class SkPdfContext;
18class SkCanvas;
19class SkPdfNativeObject;
20
21// TODO(edisonn): temporary code, to report how much of the PDF we actually think we rendered.
22enum 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
33struct NotOwnedString {
34 const unsigned char* fBuffer;
edisonn@google.comc8fda9d2013-10-09 20:23:12 +000035 // TODO(edisonn): clean up, the last two bytes are used to signal if compression is used
edisonn@google.com3aa35552013-08-14 18:26:20 +000036 size_t fBytes;
37
38 static void init(NotOwnedString* str) {
39 str->fBuffer = NULL;
40 str->fBytes = 0;
41 }
42
43 static void init(NotOwnedString* str, const char* sz) {
44 str->fBuffer = (const unsigned char*)sz;
45 str->fBytes = strlen(sz);
46 }
47
48 bool equals(const char* sz) {
49 return strncmp((const char*)fBuffer, sz, fBytes) == 0 && fBytes == strlen(sz);
50
51 }
52};
edisonn@google.comb857a0c2013-06-25 20:45:40 +000053
edisonn@google.comc8fda9d2013-10-09 20:23:12 +000054SkMatrix SkMatrixFromPdfMatrix(double array[6]);
55
edisonn@google.com063d7072013-08-16 15:05:08 +000056// TODO(edisonn): hack to make code generation simpler. Alternatively we can update the
57// generate_code.py not to rely on != operator
58bool operator !=(const SkString& first, const char* second);
59
edisonn@google.comb857a0c2013-06-25 20:45:40 +000060SkMatrix SkMatrixFromPdfArray(SkPdfArray* pdfArray);
61
edisonn@google.come50d9a12013-10-10 20:58:22 +000062SkPdfResult doType3Char(SkPdfContext* pdfContext, SkCanvas* canvas, const SkPdfNativeObject* skobj,
63 SkRect bBox, SkMatrix matrix, double textSize);
edisonn@google.com3aa35552013-08-14 18:26:20 +000064
65////////////////////////////////////////////////////////////////////////////////////////////////////
66//
67// TRACE functions
68//
69#ifdef PDF_TRACE
70void SkTraceMatrix(const SkMatrix& matrix, const char* sz);
71void SkTraceRect(const SkRect& rect, const char* sz);
72#else
73#define SkTraceMatrix(a,b)
74#define SkTraceRect(a,b)
75#endif
edisonn@google.comb857a0c2013-06-25 20:45:40 +000076
edisonn@google.comc8fda9d2013-10-09 20:23:12 +000077#ifdef PDF_TRACE_TOKENIZER
78
79static void TRACE_COMMENT(char ch) {
80 printf("%c", ch);
81}
82
83static void TRACE_TK(char ch) {
84 printf("%c", ch);
85}
86
87static void TRACE_NAME(const unsigned char* start, const unsigned char* end) {
88 while (start < end) {
89 printf("%c", *start);
90 start++;
91 }
92 printf("\n");
93}
94
95static void TRACE_STRING(const unsigned char* start, const unsigned char* end) {
96 while (start < end) {
97 printf("%c", *start);
98 start++;
99 }
100 printf("\n");
101}
102
103static void TRACE_HEXSTRING(const unsigned char* start, const unsigned char* end) {
104 while (start < end) {
105 printf("%c", *start);
106 start++;
107 }
108 printf("\n");
109}
110
111#else
112#define TRACE_COMMENT(ch)
113#define TRACE_TK(ch)
114#define TRACE_NAME(start,end)
115#define TRACE_STRING(start,end)
116#define TRACE_HEXSTRING(start,end)
117#endif
118
edisonn@google.comcf2cfa12013-08-21 16:31:37 +0000119#endif // SkPdfUtils_DEFINED