1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
/*
* Copyright 2013 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkPdfReporter_DEFINED
#define SkPdfReporter_DEFINED
#include "SkPdfConfig.h"
class SkPdfNativeObject;
class SkPdfContext;
// TODO(edisonn): ability to turn on asserts for known good files
// Severity of the issue, if it something interesting info, the result of an NYI feature,
// sme ignorable defect in pdf or a major issue.
enum SkPdfIssueSeverity {
kInfo_SkPdfIssueSeverity,
kCodeWarning_SkPdfIssueSeverity, // e.g. like NYI, PDF file is Ok.
kWarning_SkPdfIssueSeverity,
kIgnoreError_SkPdfIssueSeverity,
kError_SkPdfIssueSeverity,
kFatalError_SkPdfIssueSeverity,
_kCount__SkPdfIssueSeverity
};
// The type of the issue.
enum SkPdfIssue {
kNoIssue_SkPdfIssue,
kNullObject_SkPdfIssue,
kUnusedObject_SkPdfIssue,
kUnexpectedArraySize_SkPdfIssue,
kMissingEncoding_SkPdfIssue,
kNYI_SkPdfIssue,
kIncostistentSizes_SkPdfIssue,
kMissingRequiredKey_SkPdfIssue,
kRecursiveReferencing_SkPdfIssue,
kStackNestingOverflow_SkPdfIssue,
kStackOverflow_SkPdfIssue,
kIncositentSyntax_SkPdfIssue,
kMissingFont_SkPdfIssue,
kInvalidFont_SkPdfIssue,
kMissingBT_SkPdfIssue,
kOutOfRange_SkPdfIssue,
kUnknownBlendMode_SkPdfIssue,
kMissingExtGState_SkPdfIssue,
kMissingXObject_SkPdfIssue,
kReadStreamError_SkPdfIssue,
kMissingToken_SkPdfIssue,
kBadReference_SkPdfIssue,
kNoFlateLibrary_SkPdfIssue,
kBadStream_SkPdfIssue,
_kCount__SkPdfIssue
};
#ifdef PDF_REPORT
// Calls SkPdfReport(...) if report is true.
void SkPdfReportIf(bool report,
SkPdfIssueSeverity sev, SkPdfIssue issue,
const char* context,
const SkPdfNativeObject* obj,
SkPdfContext* pdfContext);
// Reports an issue, along with information where it happened, for example obj can be used to report
// where exactly in th pdf there is a corruption
// TODO(edisonn): add ability to report the callstack
void SkPdfReport(SkPdfIssueSeverity sev, SkPdfIssue issue,
const char* context,
const SkPdfNativeObject* obj,
SkPdfContext* pdfContext);
// Reports that an object does not have the expected type
// TODO(edisonn): replace with SkPdfReportIfUnexpectedType() to simplify the callers?
// TODO(edisonn): pass the keyword/operator too which triggers the issue.
void SkPdfReportUnexpectedType(SkPdfIssueSeverity sev,
const char* context,
const SkPdfNativeObject* obj, int anyOfTypes,
SkPdfContext* pdfContext);
// Code only in builds with reporting turn on.
#define SkPdfREPORTCODE(code) code
#else // !PDF_REPORT
#define SkPdfReportIf(a,b,c,d,e,f)
#define SkPdfReport(a,b,c,d,e)
#define SkPdfReportUnexpectedType(a,b,c,d,e)
#define SkPdfREPORTCODE(code)
#endif // PDF_REPORT
#endif // SkPdfReporter_DEFINED
|