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