fix error reporting for doc examples

Switching parts of bookmaker to use SkJSONCPP.h
introduced a couple of bugs. Fix them.

Report errors found when parsing fiddleout.json,
the results of compiling doc examples.

Parse status.json correctly for spell checking.

TBR=fmalita@chromium.org

Bug: skia:8376
Change-Id: I86d92b0613ece54495efb43424b8fca56aa2cdaf
Reviewed-on: https://skia-review.googlesource.com/154623
Reviewed-by: Cary Clark <caryclark@skia.org>
Commit-Queue: Cary Clark <caryclark@skia.org>
Auto-Submit: Cary Clark <caryclark@skia.org>
diff --git a/tools/bookmaker/fiddleParser.cpp b/tools/bookmaker/fiddleParser.cpp
index 990ff20..ec36e4b 100644
--- a/tools/bookmaker/fiddleParser.cpp
+++ b/tools/bookmaker/fiddleParser.cpp
@@ -7,6 +7,13 @@
 
 #include "bookmaker.h"
 
+// could make this more elaborate and look up the example definition in the bmh file;
+// see if a simpler hint provided is sufficient
+static bool report_error(const char* blockName, const char* errorMessage) {
+    SkDebugf("%s: %s\n", blockName, errorMessage);
+    return false;
+}
+
 bool FiddleBase::parseFiddles() {
     if (fStack.empty()) {
         return false;
@@ -17,35 +24,35 @@
         Definition* example = nullptr;
         string textString;
         if (!status->fObject.isObject()) {
-            return this->reportError<bool>("expected object");
+            return report_error(blockName, "expected object");
         }
         for (auto iter = status->fIter->begin(); status->fIter->end() != iter; ++iter) {
             const char* memberName = iter.memberName();
             if (!strcmp("compile_errors", memberName)) {
                 if (!iter->isArray()) {
-                    return this->reportError<bool>("expected array");
+                    return report_error(blockName, "expected array");
                 }
                 if (iter->size()) {
-                    return this->reportError<bool>("fiddle compiler error");
+                    return report_error(blockName, "fiddle compiler error");
                 }
                 continue;
             }
             if (!strcmp("runtime_error", memberName)) {
                 if (!iter->isString()) {
-                    return this->reportError<bool>("expected string 1");
+                    return report_error(blockName, "expected string 1");
                 }
                 if (iter->asString().length()) {
-                    return this->reportError<bool>("fiddle runtime error");
+                    return report_error(blockName, "fiddle runtime error");
                 }
                 continue;
             }
             if (!strcmp("fiddleHash", memberName)) {
                 if (!iter->isString()) {
-                    return this->reportError<bool>("expected string 2");
+                    return report_error(blockName, "expected string 2");
                 }
                 example = this->findExample(blockName);
                 if (!example) {
-                    return this->reportError<bool>("missing example");
+                    return report_error(blockName, "missing example");
                 }
                 if (example->fHash.length() && example->fHash != iter->asString()) {
                     return example->reportError<bool>("mismatched hash");
@@ -55,15 +62,15 @@
             }
             if (!strcmp("text", memberName)) {
                 if (!iter->isString()) {
-                    return this->reportError<bool>("expected string 3");
+                    return report_error(blockName, "expected string 3");
                 }
                 textString = iter->asString();
                 continue;
             }
-            return this->reportError<bool>("unexpected key");
+            return report_error(blockName, "unexpected key");
         }
         if (!example) {
-            return this->reportError<bool>("missing fiddleHash");
+            return report_error(blockName, "missing fiddleHash");
         }
         size_t strLen = textString.length();
         if (strLen) {
diff --git a/tools/bookmaker/spellCheck.cpp b/tools/bookmaker/spellCheck.cpp
index 5b1ab1d..23222a4 100644
--- a/tools/bookmaker/spellCheck.cpp
+++ b/tools/bookmaker/spellCheck.cpp
@@ -111,6 +111,8 @@
 void BmhParser::spellStatus(const char* statusFile, SkCommandLineFlags::StringArray report) const {
     SpellCheck checker(*this);
     StatusIter iter(statusFile, ".bmh", StatusFilter::kInProgress);
+    string file;
+    iter.next(&file);
     string match = iter.baseDir();
     checker.check(match.c_str());
     checker.report(report);