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