pdf report files

Review URL: https://codereview.chromium.org/26271002

git-svn-id: http://skia.googlecode.com/svn/trunk@11629 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/PdfViewer/SkPdfReporter.cpp b/experimental/PdfViewer/SkPdfReporter.cpp
new file mode 100644
index 0000000..cc0cc2d
--- /dev/null
+++ b/experimental/PdfViewer/SkPdfReporter.cpp
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+
+#include "SkPdfReporter.h"
+
+#include "SkTypes.h"
+
+const char* severityName[] = {
+"Info",
+"CodeWarning",
+"Warning",
+"IgnoreError",
+"Error",
+"FatalError",
+};
+
+const char* getSeverityName(SkPdfIssueSeverity sev) {
+    if (0 <= sev && sev < _kCount__SkPdfIssueSeverity) {
+        return severityName[sev];
+    }
+    SkASSERT(false);
+    return "UNKOWN SEVERITY";
+}
+
+// TODO(edisonn): add a flag to set the minimum warning level
+
+#ifdef PDF_REPORT
+void SkPdfReport(               SkPdfIssueSeverity sev, SkPdfIssue issue, const char* context, const SkPdfNativeObject* obj,                 SkPdfContext* pdfContext) {
+    if (sev >= kIgnoreError_SkPdfIssueSeverity) {
+        printf("%s: %s\n", getSeverityName(sev), context);
+    }
+}
+
+void SkPdfReportUnexpectedType(SkPdfIssueSeverity sev, const char* context, const SkPdfNativeObject* obj, int anyOfTypes, SkPdfContext* pdfContext) {
+    if (sev >= kIgnoreError_SkPdfIssueSeverity) {
+        printf("%s: %s\n", getSeverityName(sev), context);
+    }
+}
+
+void SkPdfReportIf(bool report, SkPdfIssueSeverity sev, SkPdfIssue issue, const char* context, const SkPdfNativeObject* obj,                 SkPdfContext* pdfContext) {
+    if (!report) {
+        return;
+    }
+    SkPdfReport(sev, issue, context, obj, pdfContext);
+}
+#endif  // PDF_REPORT
diff --git a/experimental/PdfViewer/SkPdfReporter.h b/experimental/PdfViewer/SkPdfReporter.h
new file mode 100644
index 0000000..7f1c1cf
--- /dev/null
+++ b/experimental/PdfViewer/SkPdfReporter.h
@@ -0,0 +1,74 @@
+/*
+ * 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;
+
+enum SkPdfIssueSeverity {
+    kInfo_SkPdfIssueSeverity,
+    kCodeWarning_SkPdfIssueSeverity, // e.g. like NYI, which has nothing to do with an error in the file
+    kWarning_SkPdfIssueSeverity,
+    kIgnoreError_SkPdfIssueSeverity,
+    kError_SkPdfIssueSeverity,
+    kFatalError_SkPdfIssueSeverity,
+
+    _kCount__SkPdfIssueSeverity
+};
+
+enum SkPdfIssue {
+    kNoIssue_SkPdfIssue,
+
+    kNullObject_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
+
+void SkPdfReportIf(bool report, SkPdfIssueSeverity sev, SkPdfIssue issue, const char* context, const SkPdfNativeObject* obj,                 SkPdfContext* pdfContext);
+void SkPdfReport(               SkPdfIssueSeverity sev, SkPdfIssue issue, const char* context, const SkPdfNativeObject* obj,                 SkPdfContext* pdfContext);
+void SkPdfReportUnexpectedType( SkPdfIssueSeverity sev,                   const char* context, const SkPdfNativeObject* obj, int anyOfTypes, SkPdfContext* pdfContext);
+#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