|  | /* | 
|  | * 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 |