refactoring for pdf viewer lib

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

git-svn-id: http://skia.googlecode.com/svn/trunk@9773 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/PdfViewer/SkPdfBasics.h b/experimental/PdfViewer/SkPdfBasics.h
index 126e63d..27e21f1 100644
--- a/experimental/PdfViewer/SkPdfBasics.h
+++ b/experimental/PdfViewer/SkPdfBasics.h
@@ -4,6 +4,9 @@
 #include "podofo.h"
 using namespace PoDoFo;
 
+#include "SkCanvas.h"
+#include "SkPaint.h"
+
 #include <iostream>
 #include <cstdio>
 #include <stack>
@@ -16,6 +19,8 @@
 
 class SkPdfFont;
 class SkPdfDoc;
+class SkPdfObject;
+class SkPdfResourceDictionary;
 
 // TODO(edisonn): better class design.
 struct PdfColorOperator {
diff --git a/experimental/PdfViewer/SkPdfFont.cpp b/experimental/PdfViewer/SkPdfFont.cpp
index a4d70ab..4fac286 100644
--- a/experimental/PdfViewer/SkPdfFont.cpp
+++ b/experimental/PdfViewer/SkPdfFont.cpp
@@ -1,4 +1,5 @@
 #include "SkPdfFont.h"
+#include "SkPdfParser.h"
 
 std::map<std::string, SkPdfStandardFontEntry>& getStandardFonts() {
     static std::map<std::string, SkPdfStandardFontEntry> gPdfStandardFonts;
diff --git a/experimental/PdfViewer/SkPdfFont.h b/experimental/PdfViewer/SkPdfFont.h
index a3f0d36..85b9fc4 100644
--- a/experimental/PdfViewer/SkPdfFont.h
+++ b/experimental/PdfViewer/SkPdfFont.h
@@ -7,6 +7,7 @@
 #include <map>
 #include <string>
 
+#include "SkTypeface.h"
 #include "SkUtils.h"
 #include "SkPdfBasics.h"
 #include "SkPdfUtils.h"
diff --git a/experimental/PdfViewer/SkPdfParser.cpp b/experimental/PdfViewer/SkPdfParser.cpp
new file mode 100644
index 0000000..6d5ccae
--- /dev/null
+++ b/experimental/PdfViewer/SkPdfParser.cpp
@@ -0,0 +1,2352 @@
+/*
+ * 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 "SkCanvas.h"
+#include "SkDevice.h"
+#include "SkForceLinking.h"
+#include "SkGraphics.h"
+#include "SkImageDecoder.h"
+#include "SkImageEncoder.h"
+#include "SkOSFile.h"
+#include "SkPicture.h"
+#include "SkStream.h"
+#include "SkTypeface.h"
+#include "SkTArray.h"
+#include "picture_utils.h"
+
+#include <iostream>
+#include <cstdio>
+#include <stack>
+
+#include "podofo.h"
+using namespace PoDoFo;
+
+
+__SK_FORCE_IMAGE_DECODER_LINKING;
+
+// TODO(edisonn): tool, show what objects were read at least, show the ones not even read
+// keep for each object pos in file
+// plug in for VS? syntax coloring, show selected object ... from the text, or from rendered x,y
+
+// TODO(edisonn): security - validate all the user input, all pdf!
+
+
+#include "SkPdfHeaders_autogen.h"
+#include "SkPdfPodofoMapper_autogen.h"
+#include "SkPdfParser.h"
+
+#include "SkPdfBasics.h"
+#include "SkPdfUtils.h"
+
+#include "SkPdfFont.h"
+
+bool skpdfmap(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfObject** out) {
+    return mapObject(podofoDoc, podofoObj, out);
+}
+
+
+/*
+ * TODO(edisonn):
+ * - all font types and all ppdf font features
+ *      - word spacing
+ *      - load font for baidu.pdf
+ *      - load font for youtube.pdf
+ *      - parser for pdf from the definition already available in pdfspec_autogen.py
+ *      - all docs from ~/work
+ * - encapsulate podofo in the pdf api so the skpdf does not know anything about podofo ... in progress
+ * - load gs/ especially smask and already known prop (skp) ... in progress
+ * - wrapper on classes for customizations? e.g.
+ * SkPdfPageObjectVanila - has only the basic loaders/getters
+ * SkPdfPageObject : public SkPdfPageObjectVanila, extends, and I can add customizations here
+ * need to find a nice object model for all this with constructors and factories
+ * - deal with inheritable automatically ?
+ * - deal with specific type in spec directly, add all dictionary types to known types
+*/
+
+using namespace std;
+using namespace PoDoFo;
+
+// Utilities
+static void setup_bitmap(SkBitmap* bitmap, int width, int height, SkColor color = SK_ColorWHITE) {
+    bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height);
+
+    bitmap->allocPixels();
+    bitmap->eraseColor(color);
+}
+
+// TODO(edisonn): synonyms? DeviceRGB and RGB ...
+int GetColorSpaceComponents(const std::string& colorSpace) {
+    if (colorSpace == "DeviceCMYK") {
+        return 4;
+    } else if (colorSpace == "DeviceGray" ||
+            colorSpace == "CalGray" ||
+            colorSpace == "Indexed") {
+        return 1;
+    } else if (colorSpace == "DeviceRGB" ||
+            colorSpace == "CalRGB" ||
+            colorSpace == "Lab") {
+        return 3;
+    } else {
+        return 0;
+    }
+}
+
+const PdfObject* resolveReferenceObject(const PdfMemDocument* pdfDoc,
+                                  const PdfObject* obj,
+                                  bool resolveOneElementArrays) {
+    while (obj && (obj->IsReference() || (resolveOneElementArrays &&
+                                          obj->IsArray() &&
+                                          obj->GetArray().GetSize() == 1))) {
+        if (obj->IsReference()) {
+            // We need to force the non const, the only update we will do is for recurssion checks.
+            PdfReference& ref = (PdfReference&)obj->GetReference();
+            obj = pdfDoc->GetObjects().GetObject(ref);
+        } else {
+            obj = &obj->GetArray()[0];
+        }
+    }
+
+    return obj;
+}
+
+static SkMatrix SkMatrixFromPdfMatrix(double array[6]) {
+    SkMatrix matrix;
+    matrix.setAll(SkDoubleToScalar(array[0]),
+                  SkDoubleToScalar(array[2]),
+                  SkDoubleToScalar(array[4]),
+                  SkDoubleToScalar(array[1]),
+                  SkDoubleToScalar(array[3]),
+                  SkDoubleToScalar(array[5]),
+                  SkDoubleToScalar(0),
+                  SkDoubleToScalar(0),
+                  SkDoubleToScalar(1));
+
+    return matrix;
+}
+
+SkMatrix SkMatrixFromPdfArray(SkPdfArray* pdfArray) {
+    double array[6];
+
+    // TODO(edisonn): security issue, ret if size() != 6
+    for (int i = 0; i < 6; i++) {
+        const PdfObject* elem = resolveReferenceObject(pdfArray->doc(), (*pdfArray)[i]->podofo());
+        if (elem == NULL || (!elem->IsReal() && !elem->IsNumber())) {
+            return SkMatrix::I();  // TODO(edisonn): report issue
+        }
+        array[i] = elem->GetReal();
+    }
+
+    return SkMatrixFromPdfMatrix(array);
+}
+
+PdfContext* gPdfContext = NULL;
+SkBitmap* gDumpBitmap = NULL;
+SkCanvas* gDumpCanvas = NULL;
+char gLastKeyword[100] = "";
+int gLastOpKeyword = -1;
+char allOpWithVisualEffects[100] = ",S,s,f,F,f*,B,B*,b,b*,n,Tj,TJ,\',\",d0,d1,sh,EI,Do,EX,";
+int gReadOp = 0;
+
+
+
+bool hasVisualEffect(const char* pdfOp) {
+    return true;
+    if (*pdfOp == '\0') return false;
+
+    char markedPdfOp[100] = ",";
+    strcat(markedPdfOp, pdfOp);
+    strcat(markedPdfOp, ",");
+
+    return (strstr(allOpWithVisualEffects, markedPdfOp) != NULL);
+}
+
+// TODO(edisonn): Pass PdfContext and SkCanvasd only with the define for instrumentation.
+static bool readToken(SkPdfTokenizer* fTokenizer, PdfToken* token) {
+    bool ret = fTokenizer->readToken(token);
+
+    gReadOp++;
+
+#ifdef PDF_TRACE_DIFF_IN_PNG
+    // TODO(edisonn): compare with old bitmap, and save only new bits are available, and save
+    // the numbar and name of last operation, so the file name will reflect op that changed.
+    if (hasVisualEffect(gLastKeyword)) {  // TODO(edisonn): and has dirty bits.
+        gDumpCanvas->flush();
+
+        SkBitmap bitmap;
+        setup_bitmap(&bitmap, gDumpBitmap->width(), gDumpBitmap->height());
+
+        memcpy(bitmap.getPixels(), gDumpBitmap->getPixels(), gDumpBitmap->getSize());
+
+        SkAutoTUnref<SkDevice> device(SkNEW_ARGS(SkDevice, (bitmap)));
+        SkCanvas canvas(device);
+
+        // draw context stuff here
+        SkPaint blueBorder;
+        blueBorder.setColor(SK_ColorBLUE);
+        blueBorder.setStyle(SkPaint::kStroke_Style);
+        blueBorder.setTextSize(SkDoubleToScalar(20));
+
+        SkString str;
+
+        const SkClipStack* clipStack = gDumpCanvas->getClipStack();
+        if (clipStack) {
+            SkClipStack::Iter iter(*clipStack, SkClipStack::Iter::kBottom_IterStart);
+            const SkClipStack::Element* elem;
+            double y = 0;
+            int total = 0;
+            while (elem = iter.next()) {
+                total++;
+                y += 30;
+
+                switch (elem->getType()) {
+                    case SkClipStack::Element::kRect_Type:
+                        canvas.drawRect(elem->getRect(), blueBorder);
+                        canvas.drawText("Rect Clip", strlen("Rect Clip"), SkDoubleToScalar(10), SkDoubleToScalar(y), blueBorder);
+                        break;
+                    case SkClipStack::Element::kPath_Type:
+                        canvas.drawPath(elem->getPath(), blueBorder);
+                        canvas.drawText("Path Clip", strlen("Path Clip"), SkDoubleToScalar(10), SkDoubleToScalar(y), blueBorder);
+                        break;
+                    case SkClipStack::Element::kEmpty_Type:
+                        canvas.drawText("Empty Clip!!!", strlen("Empty Clip!!!"), SkDoubleToScalar(10), SkDoubleToScalar(y), blueBorder);
+                        break;
+                    default:
+                        canvas.drawText("Unkown Clip!!!", strlen("Unkown Clip!!!"), SkDoubleToScalar(10), SkDoubleToScalar(y), blueBorder);
+                        break;
+                }
+            }
+
+            y += 30;
+            str.printf("Number of clips in stack: %i", total);
+            canvas.drawText(str.c_str(), str.size(), SkDoubleToScalar(10), SkDoubleToScalar(y), blueBorder);
+        }
+
+        const SkRegion& clipRegion = gDumpCanvas->getTotalClip();
+        SkPath clipPath;
+        if (clipRegion.getBoundaryPath(&clipPath)) {
+            SkPaint redBorder;
+            redBorder.setColor(SK_ColorRED);
+            redBorder.setStyle(SkPaint::kStroke_Style);
+            canvas.drawPath(clipPath, redBorder);
+        }
+
+        canvas.flush();
+
+        SkString out;
+
+        // TODO(edisonn): get the image, and overlay on top of it, the clip , grafic state, teh stack,
+        // ... and other properties, to be able to debug th code easily
+
+        out.appendf("/usr/local/google/home/edisonn/log_view2/step-%i-%s.png", gLastOpKeyword, gLastKeyword);
+        SkImageEncoder::EncodeFile(out.c_str(), bitmap, SkImageEncoder::kPNG_Type, 100);
+    }
+
+    if (token->fType == kKeyword_TokenType) {
+        strcpy(gLastKeyword, token->fKeyword);
+        gLastOpKeyword = gReadOp;
+    } else {
+        strcpy(gLastKeyword, "");
+    }
+#endif
+
+    return ret;
+}
+
+
+
+typedef PdfResult (*PdfOperatorRenderer)(PdfContext*, SkCanvas*, PdfTokenLooper**);
+
+map<std::string, PdfOperatorRenderer> gPdfOps;
+
+map<std::string, int> gRenderStats[kCount_PdfResult];
+
+char* gRenderStatsNames[kCount_PdfResult] = {
+    "Success",
+    "Partially implemented",
+    "Not yet implemented",
+    "Ignore Error",
+    "Error",
+    "Unsupported/Unknown"
+};
+
+static SkTypeface* SkTypefaceFromPdfFont(PdfFont* font) {
+    if (font == NULL) {
+        return SkTypeface::CreateFromName("Times New Roman", SkTypeface::kNormal);
+    }
+
+    PdfObject* fontObject = font->GetObject();
+
+    PdfObject* pBaseFont = NULL;
+    // TODO(edisonn): warning, PoDoFo has a bug in PdfFont constructor, does not call InitVars()
+    // for now fixed locally.
+    pBaseFont = fontObject->GetIndirectKey( "BaseFont" );
+    const char* pszBaseFontName = pBaseFont->GetName().GetName().c_str();
+
+#ifdef PDF_TRACE
+    std::string str;
+    fontObject->ToString(str);
+    printf("Base Font Name: %s\n", pszBaseFontName);
+    printf("Font Object Data: %s\n", str.c_str());
+#endif
+
+    SkTypeface* typeface = SkTypefaceFromPdfStandardFont(pszBaseFontName, font->IsBold(), font->IsItalic());
+
+    if (typeface != NULL) {
+        return typeface;
+    }
+
+    char name[1000];
+    // HACK
+    strncpy(name, pszBaseFontName, 1000);
+    char* comma = strstr(name, ",");
+    char* dash = strstr(name, "-");
+    if (comma) *comma = '\0';
+    if (dash) *dash = '\0';
+
+    typeface = SkTypeface::CreateFromName(
+                name,
+                SkTypeface::Style((font->IsBold() ? SkTypeface::kBold : 0) |
+                                  (font->IsItalic() ? SkTypeface::kItalic : 0)));
+
+    if (typeface != NULL) {
+#ifdef PDF_TRACE
+    printf("HACKED FONT found %s\n", name);
+#endif
+        return typeface;
+    }
+
+#ifdef PDF_TRACE
+    printf("FONT_NOT_FOUND %s\n", pszBaseFontName);
+#endif
+
+    // TODO(edisonn): Report Warning, NYI
+    return SkTypeface::CreateFromName(
+                "Times New Roman",
+                SkTypeface::Style((font->IsBold() ? SkTypeface::kBold : 0) |
+                                  (font->IsItalic() ? SkTypeface::kItalic : 0)));
+}
+
+PdfResult DrawText(PdfContext* pdfContext,
+                   const SkPdfObject* str,
+                   SkCanvas* canvas)
+{
+
+    SkPdfFont* skfont = pdfContext->fGraphicsState.fSkFont;
+    if (skfont == NULL) {
+        skfont = SkPdfFont::Default();
+    }
+
+    SkUnencodedText binary(str);
+
+    SkDecodedText decoded;
+
+    if (skfont->encoding() == NULL) {
+        // TODO(edisonn): report warning
+        return kNYI_PdfResult;
+    }
+
+    skfont->encoding()->decodeText(binary, &decoded);
+
+    SkPaint paint;
+    // TODO(edisonn): when should fCurFont->GetFontSize() used? When cur is fCurFontSize == 0?
+    // Or maybe just not call setTextSize at all?
+    if (pdfContext->fGraphicsState.fCurFontSize != 0) {
+        paint.setTextSize(SkDoubleToScalar(pdfContext->fGraphicsState.fCurFontSize));
+    }
+
+//    if (fCurFont && fCurFont->GetFontScale() != 0) {
+//        paint.setTextScaleX(SkFloatToScalar(fCurFont->GetFontScale() / 100.0));
+//    }
+
+    pdfContext->fGraphicsState.applyGraphicsState(&paint, false);
+
+    canvas->save();
+
+#if 1
+    SkMatrix matrix = pdfContext->fGraphicsState.fMatrixTm;
+
+    SkPoint point1;
+    pdfContext->fGraphicsState.fMatrixTm.mapXY(SkIntToScalar(0), SkIntToScalar(0), &point1);
+
+    SkMatrix mirror;
+    mirror.setTranslate(0, -point1.y());
+    // TODO(edisonn): fix rotated text, and skewed too
+    mirror.postScale(SK_Scalar1, -SK_Scalar1);
+    // TODO(edisonn): post rotate, skew
+    mirror.postTranslate(0, point1.y());
+
+    matrix.postConcat(mirror);
+
+    canvas->setMatrix(matrix);
+
+    SkTraceMatrix(matrix, "mirrored");
+#endif
+
+    skfont->drawText(decoded, &paint, pdfContext, canvas, &pdfContext->fGraphicsState.fMatrixTm);
+    canvas->restore();
+
+    return kPartial_PdfResult;
+}
+
+// TODO(edisonn): create header files with declarations!
+PdfResult PdfOp_q(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper);
+PdfResult PdfOp_Q(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper);
+PdfResult PdfOp_Tw(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper);
+PdfResult PdfOp_Tc(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper);
+
+// TODO(edisonn): deal with synonyms (/BPC == /BitsPerComponent), here or in GetKey?
+// Always pass long form in key, and have a map of long -> short key
+bool LongFromDictionary(const PdfMemDocument* pdfDoc,
+                        const PdfDictionary& dict,
+                        const char* key,
+                        long* data) {
+    const PdfObject* value = resolveReferenceObject(pdfDoc,
+                                              dict.GetKey(PdfName(key)));
+
+    if (value == NULL || !value->IsNumber()) {
+        return false;
+    }
+    if (data == NULL) {
+        return true;
+    }
+
+    *data = value->GetNumber();
+    return true;
+}
+
+bool LongFromDictionary(const PdfMemDocument* pdfDoc,
+                        const PdfDictionary& dict,
+                        const char* key,
+                        const char* abr,
+                        long* data) {
+    if (LongFromDictionary(pdfDoc, dict, key, data)) return true;
+    if (abr == NULL || *abr == '\0') return false;
+    return LongFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool DoubleFromDictionary(const PdfMemDocument* pdfDoc,
+                          const PdfDictionary& dict,
+                          const char* key,
+                          double* data) {
+    const PdfObject* value = resolveReferenceObject(pdfDoc,
+                                              dict.GetKey(PdfName(key)));
+
+    if (value == NULL || (!value->IsReal() && !value->IsNumber())) {
+        return false;
+    }
+    if (data == NULL) {
+        return true;
+    }
+
+    *data = value->GetReal();
+    return true;
+}
+
+bool DoubleFromDictionary(const PdfMemDocument* pdfDoc,
+                          const PdfDictionary& dict,
+                          const char* key,
+                          const char* abr,
+                          double* data) {
+    if (DoubleFromDictionary(pdfDoc, dict, key, data)) return true;
+    if (abr == NULL || *abr == '\0') return false;
+    return DoubleFromDictionary(pdfDoc, dict, abr, data);
+}
+
+
+bool BoolFromDictionary(const PdfMemDocument* pdfDoc,
+                        const PdfDictionary& dict,
+                        const char* key,
+                        bool* data) {
+    const PdfObject* value = resolveReferenceObject(pdfDoc,
+                                              dict.GetKey(PdfName(key)));
+
+    if (value == NULL || !value->IsBool()) {
+        return false;
+    }
+    if (data == NULL) {
+        return true;
+    }
+
+    *data = value->GetBool();
+    return true;
+}
+
+bool BoolFromDictionary(const PdfMemDocument* pdfDoc,
+                        const PdfDictionary& dict,
+                        const char* key,
+                        const char* abr,
+                        bool* data) {
+    if (BoolFromDictionary(pdfDoc, dict, key, data)) return true;
+    if (abr == NULL || *abr == '\0') return false;
+    return BoolFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool NameFromDictionary(const PdfMemDocument* pdfDoc,
+                        const PdfDictionary& dict,
+                        const char* key,
+                        std::string* data) {
+    const PdfObject* value = resolveReferenceObject(pdfDoc,
+                                              dict.GetKey(PdfName(key)),
+                                              true);
+    if (value == NULL || !value->IsName()) {
+        return false;
+    }
+    if (data == NULL) {
+        return true;
+    }
+
+    *data = value->GetName().GetName();
+    return true;
+}
+
+bool NameFromDictionary(const PdfMemDocument* pdfDoc,
+                        const PdfDictionary& dict,
+                        const char* key,
+                        const char* abr,
+                        std::string* data) {
+    if (NameFromDictionary(pdfDoc, dict, key, data)) return true;
+    if (abr == NULL || *abr == '\0') return false;
+    return NameFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool StringFromDictionary(const PdfMemDocument* pdfDoc,
+                          const PdfDictionary& dict,
+                          const char* key,
+                          std::string* data) {
+    const PdfObject* value = resolveReferenceObject(pdfDoc,
+                                              dict.GetKey(PdfName(key)),
+                                              true);
+    if (value == NULL || (!value->IsString() && !value->IsHexString())) {
+        return false;
+    }
+    if (data == NULL) {
+        return true;
+    }
+
+    *data = value->GetString().GetString();
+    return true;
+}
+
+bool StringFromDictionary(const PdfMemDocument* pdfDoc,
+                          const PdfDictionary& dict,
+                          const char* key,
+                          const char* abr,
+                          std::string* data) {
+    if (StringFromDictionary(pdfDoc, dict, key, data)) return true;
+    if (abr == NULL || *abr == '\0') return false;
+    return StringFromDictionary(pdfDoc, dict, abr, data);
+}
+
+/*
+bool ArrayFromDictionary(const PdfMemDocument* pdfDoc,
+                              const PdfDictionary& dict,
+                              const char* key,
+                              SkPdfArray** data) {
+    const PdfObject* value = resolveReferenceObject(pdfDoc,
+                                              dict.GetKey(PdfName(key)),
+                                              true);
+    if (value == NULL || !value->IsArray()) {
+        return false;
+    }
+    if (data == NULL) {
+        return true;
+    }
+
+    return mapArray(*pdfDoc, *value, data);
+}
+
+
+bool ArrayFromDictionary(const PdfMemDocument* pdfDoc,
+                        const PdfDictionary& dict,
+                        const char* key,
+                        const char* abr,
+                        SkPdfArray** data) {
+    if (ArrayFromDictionary(pdfDoc, dict, key, data)) return true;
+    if (abr == NULL || *abr == '\0') return false;
+    return ArrayFromDictionary(pdfDoc, dict, abr, data);
+}
+
+
+bool DictionaryFromDictionary(const PdfMemDocument* pdfDoc,
+                              const PdfDictionary& dict,
+                              const char* key,
+                              SkPdfDictionary** data) {
+    const PdfObject* value = resolveReferenceObject(pdfDoc,
+                                              dict.GetKey(PdfName(key)),
+                                              true);
+    if (value == NULL || !value->IsDictionary()) {
+        return false;
+    }
+    if (data == NULL) {
+        return true;
+    }
+
+    return mapDictionary(*pdfDoc, *value, data);
+}
+
+bool DictionaryFromDictionary(const PdfMemDocument* pdfDoc,
+                        const PdfDictionary& dict,
+                        const char* key,
+                        const char* abr,
+                        SkPdfDictionary** data) {
+    if (DictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+    if (abr == NULL || *abr == '\0') return false;
+    return DictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+
+bool ObjectFromDictionary(const PdfMemDocument* pdfDoc,
+                          const PdfDictionary& dict,
+                          const char* key,
+                          SkPdfObject** data) {
+    const PdfObject* value = resolveReferenceObject(pdfDoc,
+                                              dict.GetKey(PdfName(key)),
+                                              true);
+    if (value == NULL) {
+        return false;
+    }
+    if (data == NULL) {
+        return true;
+    }
+    return mapObject(*pdfDoc, *value, data);
+}
+
+bool ObjectFromDictionary(const PdfMemDocument* pdfDoc,
+                        const PdfDictionary& dict,
+                        const char* key,
+                        const char* abr,
+                        SkPdfObject** data) {
+    if (ObjectFromDictionary(pdfDoc, dict, key, data)) return true;
+    if (abr == NULL || *abr == '\0') return false;
+    return ObjectFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool StreamFromDictionary(const PdfMemDocument* pdfDoc,
+                          const PdfDictionary& dict,
+                          const char* key,
+                          SkPdfStream** data) {
+    const PdfObject* value = resolveReferenceObject(pdfDoc,
+                                              dict.GetKey(PdfName(key)),
+                                              true);
+    if (value == NULL) {
+        return false;
+    }
+    if (data == NULL) {
+        return true;
+    }
+    return mapStream(*pdfDoc, *value, data);
+}
+
+bool StreamFromDictionary(const PdfMemDocument* pdfDoc,
+                        const PdfDictionary& dict,
+                        const char* key,
+                        const char* abr,
+                        SkPdfStream** data) {
+    if (StreamFromDictionary(pdfDoc, dict, key, data)) return true;
+    if (abr == NULL || *abr == '\0') return false;
+    return StreamFromDictionary(pdfDoc, dict, abr, data);
+}
+*/
+
+// TODO(edisonn): perf!!!
+
+static SkColorTable* getGrayColortable() {
+    static SkColorTable* grayColortable = NULL;
+    if (grayColortable == NULL) {
+        SkPMColor* colors = new SkPMColor[256];
+        for (int i = 0 ; i < 256; i++) {
+            colors[i] = SkPreMultiplyARGB(255, i, i, i);
+        }
+        grayColortable = new SkColorTable(colors, 256);
+    }
+    return grayColortable;
+}
+
+SkBitmap transferImageStreamToBitmap(unsigned char* uncompressedStream, pdf_long uncompressedStreamLength,
+                                     int width, int height, int bytesPerLine,
+                                     int bpc, const std::string& colorSpace,
+                                     bool transparencyMask) {
+    SkBitmap bitmap;
+
+    int components = GetColorSpaceComponents(colorSpace);
+//#define MAX_COMPONENTS 10
+
+    int bitsPerLine = width * components * bpc;
+    // TODO(edisonn): assume start of lines are aligned at 32 bits?
+    // Is there a faster way to load the uncompressed stream into a bitmap?
+
+    // minimal support for now
+    if ((colorSpace == "DeviceRGB" || colorSpace == "RGB") && bpc == 8) {
+        SkColor* uncompressedStreamArgb = (SkColor*)malloc(width * height * sizeof(SkColor));
+
+        for (int h = 0 ; h < height; h++) {
+            long i = width * (height - 1 - h);
+            for (int w = 0 ; w < width; w++) {
+                uncompressedStreamArgb[i] = SkColorSetRGB(uncompressedStream[3 * w],
+                                                          uncompressedStream[3 * w + 1],
+                                                          uncompressedStream[3 * w + 2]);
+                i++;
+            }
+            uncompressedStream += bytesPerLine;
+        }
+
+        bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
+        bitmap.setPixels(uncompressedStreamArgb);
+    }
+    else if ((colorSpace == "DeviceGray" || colorSpace == "Gray") && bpc == 8) {
+        unsigned char* uncompressedStreamA8 = (unsigned char*)malloc(width * height);
+
+        for (int h = 0 ; h < height; h++) {
+            long i = width * (height - 1 - h);
+            for (int w = 0 ; w < width; w++) {
+                uncompressedStreamA8[i] = transparencyMask ? 255 - uncompressedStream[w] :
+                                                             uncompressedStream[w];
+                i++;
+            }
+            uncompressedStream += bytesPerLine;
+        }
+
+        bitmap.setConfig(transparencyMask ? SkBitmap::kA8_Config : SkBitmap::kIndex8_Config,
+                         width, height);
+        bitmap.setPixels(uncompressedStreamA8, transparencyMask ? NULL : getGrayColortable());
+    }
+
+    // TODO(edisonn): Report Warning, NYI, or error
+    return bitmap;
+}
+
+bool transferImageStreamToARGB(unsigned char* uncompressedStream, pdf_long uncompressedStreamLength,
+                               int width, int bytesPerLine,
+                               int bpc, const std::string& colorSpace,
+                               SkColor** uncompressedStreamArgb,
+                               pdf_long* uncompressedStreamLengthInBytesArgb) {
+    int components = GetColorSpaceComponents(colorSpace);
+//#define MAX_COMPONENTS 10
+
+    int bitsPerLine = width * components * bpc;
+    // TODO(edisonn): assume start of lines are aligned at 32 bits?
+    int height = uncompressedStreamLength / bytesPerLine;
+
+    // minimal support for now
+    if ((colorSpace == "DeviceRGB" || colorSpace == "RGB") && bpc == 8) {
+        *uncompressedStreamLengthInBytesArgb = width * height * 4;
+        *uncompressedStreamArgb = (SkColor*)malloc(*uncompressedStreamLengthInBytesArgb);
+
+        for (int h = 0 ; h < height; h++) {
+            long i = width * (height - 1 - h);
+            for (int w = 0 ; w < width; w++) {
+                (*uncompressedStreamArgb)[i] = SkColorSetRGB(uncompressedStream[3 * w],
+                                                             uncompressedStream[3 * w + 1],
+                                                             uncompressedStream[3 * w + 2]);
+                i++;
+            }
+            uncompressedStream += bytesPerLine;
+        }
+        return true;
+    }
+
+    if ((colorSpace == "DeviceGray" || colorSpace == "Gray") && bpc == 8) {
+        *uncompressedStreamLengthInBytesArgb = width * height * 4;
+        *uncompressedStreamArgb = (SkColor*)malloc(*uncompressedStreamLengthInBytesArgb);
+
+        for (int h = 0 ; h < height; h++) {
+            long i = width * (height - 1 - h);
+            for (int w = 0 ; w < width; w++) {
+                (*uncompressedStreamArgb)[i] = SkColorSetRGB(uncompressedStream[w],
+                                                             uncompressedStream[w],
+                                                             uncompressedStream[w]);
+                i++;
+            }
+            uncompressedStream += bytesPerLine;
+        }
+        return true;
+    }
+
+    return false;
+}
+
+// utils
+
+// TODO(edisonn): add cache, or put the bitmap property directly on the PdfObject
+// TODO(edisonn): deal with colorSpaces, we could add them to SkBitmap::Config
+// TODO(edisonn): preserve A1 format that skia knows, + fast convert from 111, 222, 444 to closest
+// skia format, through a table
+
+// this functions returns the image, it does not look at the smask.
+
+SkBitmap getImageFromObject(PdfContext* pdfContext, const SkPdfImageDictionary* image, bool transparencyMask) {
+    if (image == NULL || !image->valid()) {
+        // TODO(edisonn): report warning to be used in testing.
+        return SkBitmap();
+    }
+
+    // TODO (edisonn): Fast Jpeg(DCTDecode) draw, or fast PNG(FlateDecode) draw ...
+//    PdfObject* value = resolveReferenceObject(pdfContext->fPdfDoc,
+//                                              obj.GetDictionary().GetKey(PdfName("Filter")));
+//    if (value && value->IsArray() && value->GetArray().GetSize() == 1) {
+//        value = resolveReferenceObject(pdfContext->fPdfDoc,
+//                                       &value->GetArray()[0]);
+//    }
+//    if (value && value->IsName() && value->GetName().GetName() == "DCTDecode") {
+//        SkStream stream = SkStream::
+//        SkImageDecoder::Factory()
+//    }
+
+    long bpc = image->BitsPerComponent();
+    long width = image->Width();
+    long height = image->Height();
+    std::string colorSpace = "DeviceRGB";
+
+    // TODO(edisonn): color space can be an array too!
+    if (image->isColorSpaceAName()) {
+        colorSpace = image->getColorSpaceAsName();
+    }
+
+/*
+    bool imageMask = image->imageMask();
+
+    if (imageMask) {
+        if (bpc != 0 && bpc != 1) {
+            // TODO(edisonn): report warning to be used in testing.
+            return SkBitmap();
+        }
+        bpc = 1;
+    }
+*/
+
+    const PdfObject* obj = image->podofo();
+
+    char* uncompressedStream = NULL;
+    pdf_long uncompressedStreamLength = 0;
+
+    PdfResult ret = kPartial_PdfResult;
+    // TODO(edisonn): get rid of try/catch exceptions! We should not throw on user data!
+    try {
+        obj->GetStream()->GetFilteredCopy(&uncompressedStream, &uncompressedStreamLength);
+    } catch (PdfError& e) {
+        // TODO(edisonn): report warning to be used in testing.
+        return SkBitmap();
+    }
+
+    int bytesPerLine = uncompressedStreamLength / height;
+#ifdef PDF_TRACE
+    if (uncompressedStreamLength % height != 0) {
+        printf("Warning uncompressedStreamLength % height != 0 !!!\n");
+    }
+#endif
+
+    SkBitmap bitmap = transferImageStreamToBitmap(
+            (unsigned char*)uncompressedStream, uncompressedStreamLength,
+            width, height, bytesPerLine,
+            bpc, colorSpace,
+            transparencyMask);
+
+    free(uncompressedStream);
+
+    return bitmap;
+}
+
+SkBitmap getSmaskFromObject(PdfContext* pdfContext, const SkPdfImageDictionary* obj) {
+    const PdfObject* sMask = resolveReferenceObject(&pdfContext->fPdfDoc->podofo(),
+                                              obj->podofo()->GetDictionary().GetKey(PdfName("SMask")));
+
+#ifdef PDF_TRACE
+    std::string str;
+    if (sMask) {
+        sMask->ToString(str);
+        printf("/SMask of /Subtype /Image: %s\n", str.c_str());
+    }
+#endif
+
+    if (sMask) {
+        SkPdfImageDictionary skxobjmask(&pdfContext->fPdfDoc->podofo(), sMask);
+        return getImageFromObject(pdfContext, &skxobjmask, true);
+    }
+
+    // TODO(edisonn): implement GS SMask. Default to empty right now.
+    return pdfContext->fGraphicsState.fSMask;
+}
+
+PdfResult doXObject_Image(PdfContext* pdfContext, SkCanvas* canvas, const SkPdfImageDictionary* skpdfimage) {
+    if (skpdfimage == NULL || !skpdfimage->valid()) {
+        return kIgnoreError_PdfResult;
+    }
+
+    SkBitmap image = getImageFromObject(pdfContext, skpdfimage, false);
+    SkBitmap sMask = getSmaskFromObject(pdfContext, skpdfimage);
+
+    canvas->save();
+    canvas->setMatrix(pdfContext->fGraphicsState.fMatrix);
+    SkRect dst = SkRect::MakeXYWH(SkDoubleToScalar(0.0), SkDoubleToScalar(0.0), SkDoubleToScalar(1.0), SkDoubleToScalar(1.0));
+
+    if (sMask.empty()) {
+        canvas->drawBitmapRect(image, dst, NULL);
+    } else {
+        canvas->saveLayer(&dst, NULL);
+        canvas->drawBitmapRect(image, dst, NULL);
+        SkPaint xfer;
+        pdfContext->fGraphicsState.applyGraphicsState(&xfer, false);
+        xfer.setXfermodeMode(SkXfermode::kSrcOut_Mode); // SkXfermode::kSdtOut_Mode
+        canvas->drawBitmapRect(sMask, dst, &xfer);
+        canvas->restore();
+    }
+
+    canvas->restore();
+
+    return kPartial_PdfResult;
+}
+
+bool SkMatrixFromDictionary(const PdfMemDocument* pdfDoc,
+                            const PdfDictionary& dict,
+                            const char* key,
+                            SkMatrix** matrix) {
+    const PdfObject* value = resolveReferenceObject(pdfDoc,
+                                                    dict.GetKey(PdfName(key)));
+
+    if (value == NULL || !value->IsArray()) {
+        return false;
+    }
+
+    if (value->GetArray().GetSize() != 6) {
+        return false;
+    }
+
+    double array[6];
+    for (int i = 0; i < 6; i++) {
+        const PdfObject* elem = resolveReferenceObject(pdfDoc, &value->GetArray()[i]);
+        if (elem == NULL || (!elem->IsReal() && !elem->IsNumber())) {
+            return false;
+        }
+        array[i] = elem->GetReal();
+    }
+
+    *matrix = new SkMatrix();
+    **matrix = SkMatrixFromPdfMatrix(array);
+    return true;
+}
+
+bool SkMatrixFromDictionary(const PdfMemDocument* pdfDoc,
+                        const PdfDictionary& dict,
+                        const char* key,
+                        const char* abr,
+                        SkMatrix** data) {
+    if (SkMatrixFromDictionary(pdfDoc, dict, key, data)) return true;
+    if (abr == NULL || *abr == '\0') return false;
+    return SkMatrixFromDictionary(pdfDoc, dict, abr, data);
+
+}
+
+bool SkRectFromDictionary(const PdfMemDocument* pdfDoc,
+                          const PdfDictionary& dict,
+                          const char* key,
+                          SkRect** rect) {
+    const PdfObject* value = resolveReferenceObject(pdfDoc,
+                                                    dict.GetKey(PdfName(key)));
+
+    if (value == NULL || !value->IsArray()) {
+        return false;
+    }
+
+    if (value->GetArray().GetSize() != 4) {
+        return false;
+    }
+
+    double array[4];
+    for (int i = 0; i < 4; i++) {
+        const PdfObject* elem = resolveReferenceObject(pdfDoc, &value->GetArray()[i]);
+        if (elem == NULL || (!elem->IsReal() && !elem->IsNumber())) {
+            return false;
+        }
+        array[i] = elem->GetReal();
+    }
+
+    *rect = new SkRect();
+    **rect = SkRect::MakeLTRB(SkDoubleToScalar(array[0]),
+                              SkDoubleToScalar(array[1]),
+                              SkDoubleToScalar(array[2]),
+                              SkDoubleToScalar(array[3]));
+    return true;
+}
+
+bool SkRectFromDictionary(const PdfMemDocument* pdfDoc,
+                        const PdfDictionary& dict,
+                        const char* key,
+                        const char* abr,
+                        SkRect** data) {
+    if (SkRectFromDictionary(pdfDoc, dict, key, data)) return true;
+    if (abr == NULL || *abr == '\0') return false;
+    return SkRectFromDictionary(pdfDoc, dict, abr, data);
+
+}
+
+
+SkPdfObject* get(const SkPdfObject* obj, const char* key, const char* abr = "") {
+    SkPdfObject* ret = NULL;
+    if (obj == NULL) return NULL;
+    const SkPdfDictionary* dict = obj->asDictionary();
+    if (dict == NULL) return NULL;
+    if (!dict->podofo()->IsDictionary()) return NULL;
+    ObjectFromDictionary(dict->doc(), dict->podofo()->GetDictionary(), key, abr, &ret);
+    return ret;
+}
+
+PdfResult doXObject_Form(PdfContext* pdfContext, SkCanvas* canvas, SkPdfType1FormDictionary* skobj) {
+    if (!skobj || !skobj->podofo() || !skobj->podofo()->HasStream() || skobj->podofo()->GetStream() == NULL || skobj->podofo()->GetStream()->GetLength() == 0) {
+        return kOK_PdfResult;
+    }
+
+    PdfOp_q(pdfContext, canvas, NULL);
+    canvas->save();
+
+
+    if (skobj->Resources()) {
+        pdfContext->fGraphicsState.fResources = skobj->Resources();
+    }
+
+    SkTraceMatrix(pdfContext->fGraphicsState.fMatrix, "Current matrix");
+
+    if (skobj->Matrix()) {
+        pdfContext->fGraphicsState.fMatrix.preConcat(*skobj->Matrix());
+        pdfContext->fGraphicsState.fMatrixTm = pdfContext->fGraphicsState.fMatrix;
+        pdfContext->fGraphicsState.fMatrixTlm = pdfContext->fGraphicsState.fMatrix;
+        // TODO(edisonn) reset matrixTm and matricTlm also?
+    }
+
+    SkTraceMatrix(pdfContext->fGraphicsState.fMatrix, "Total matrix");
+
+    canvas->setMatrix(pdfContext->fGraphicsState.fMatrix);
+
+    if (skobj->BBox()) {
+        canvas->clipRect(*skobj->BBox(), SkRegion::kIntersect_Op, true);  // TODO(edisonn): AA from settings.
+    }
+
+    // TODO(edisonn): iterate smart on the stream even if it is compressed, tokenize it as we go.
+    // For this PdfContentsTokenizer needs to be extended.
+
+    PdfResult ret = kPartial_PdfResult;
+    SkPdfTokenizer tokenizer(skobj);
+    PdfMainLooper looper(NULL, &tokenizer, pdfContext, canvas);
+    looper.loop();
+
+    // TODO(edisonn): should we restore the variable stack at the same state?
+    // There could be operands left, that could be consumed by a parent tokenizer when we pop.
+    canvas->restore();
+    PdfOp_Q(pdfContext, canvas, NULL);
+    return ret;
+}
+
+PdfResult doXObject_PS(PdfContext* pdfContext, SkCanvas* canvas, const PdfObject& obj) {
+    return kNYI_PdfResult;
+}
+
+PdfResult doType3Char(PdfContext* pdfContext, SkCanvas* canvas, SkPdfObject* skobj, SkRect bBox, SkMatrix matrix, double textSize) {
+    if (!skobj || !skobj->podofo() || !skobj->podofo()->HasStream() || skobj->podofo()->GetStream() == NULL || skobj->podofo()->GetStream()->GetLength() == 0) {
+        return kOK_PdfResult;
+    }
+
+    PdfOp_q(pdfContext, canvas, NULL);
+    canvas->save();
+
+    pdfContext->fGraphicsState.fMatrixTm.preConcat(matrix);
+    pdfContext->fGraphicsState.fMatrixTm.preScale(SkDoubleToScalar(textSize), SkDoubleToScalar(textSize));
+
+    pdfContext->fGraphicsState.fMatrix = pdfContext->fGraphicsState.fMatrixTm;
+    pdfContext->fGraphicsState.fMatrixTlm = pdfContext->fGraphicsState.fMatrix;
+
+    SkTraceMatrix(pdfContext->fGraphicsState.fMatrix, "Total matrix");
+
+    canvas->setMatrix(pdfContext->fGraphicsState.fMatrix);
+
+    SkRect rm = bBox;
+    pdfContext->fGraphicsState.fMatrix.mapRect(&rm);
+
+    SkTraceRect(rm, "bbox mapped");
+
+    canvas->clipRect(bBox, SkRegion::kIntersect_Op, true);  // TODO(edisonn): AA from settings.
+
+    // TODO(edisonn): iterate smart on the stream even if it is compressed, tokenize it as we go.
+    // For this PdfContentsTokenizer needs to be extended.
+
+    PdfResult ret = kPartial_PdfResult;
+    SkPdfTokenizer tokenizer(skobj);
+    PdfMainLooper looper(NULL, &tokenizer, pdfContext, canvas);
+    looper.loop();
+
+    // TODO(edisonn): should we restore the variable stack at the same state?
+    // There could be operands left, that could be consumed by a parent tokenizer when we pop.
+    canvas->restore();
+    PdfOp_Q(pdfContext, canvas, NULL);
+    return ret;
+}
+
+
+// TODO(edisonn): faster, have the property on the SkPdfObject itself?
+std::set<const PdfObject*> gInRendering;
+
+class CheckRecursiveRendering {
+    const PdfObject& fObj;
+public:
+    CheckRecursiveRendering(const PdfObject& obj) : fObj(obj) {
+        gInRendering.insert(&obj);
+    }
+
+    ~CheckRecursiveRendering() {
+        //SkASSERT(fObj.fInRendering);
+        gInRendering.erase(&fObj);
+    }
+
+    static bool IsInRendering(const PdfObject& obj) {
+        return gInRendering.find(&obj) != gInRendering.end();
+    }
+};
+
+PdfResult doXObject(PdfContext* pdfContext, SkCanvas* canvas, const SkPdfObject& obj) {
+    if (CheckRecursiveRendering::IsInRendering(*obj.podofo())) {
+        // Oops, corrupt PDF!
+        return kIgnoreError_PdfResult;
+    }
+
+    CheckRecursiveRendering checkRecursion(*obj.podofo());
+
+    // TODO(edisonn): check type
+    SkPdfXObjectDictionary* skobj = NULL;
+    if (!mapXObjectDictionary(obj, &skobj)) return kIgnoreError_PdfResult;
+
+    if (!skobj || !skobj->valid()) return kIgnoreError_PdfResult;
+
+    PdfResult ret = kIgnoreError_PdfResult;
+    switch (skobj->getType())
+    {
+        case kImageDictionary_SkPdfObjectType:
+            ret = doXObject_Image(pdfContext, canvas, skobj->asImageDictionary());
+            break;
+        case kType1FormDictionary_SkPdfObjectType:
+            ret = doXObject_Form(pdfContext, canvas, skobj->asType1FormDictionary());
+            break;
+        //case kObjectDictionaryXObjectPS_SkPdfObjectType:
+            //return doXObject_PS(skxobj.asPS());
+    }
+
+    delete skobj;
+    return ret;
+}
+
+PdfResult PdfOp_q(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fStateStack.push(pdfContext->fGraphicsState);
+    canvas->save();
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_Q(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fGraphicsState = pdfContext->fStateStack.top();
+    pdfContext->fStateStack.pop();
+    canvas->restore();
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_cm(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    double array[6];
+    for (int i = 0 ; i < 6 ; i++) {
+        array[5 - i] = pdfContext->fObjectStack.top()->asNumber()->value();
+        pdfContext->fObjectStack.pop();
+    }
+
+    // a b
+    // c d
+    // e f
+
+    // 0 1
+    // 2 3
+    // 4 5
+
+    // sx ky
+    // kx sy
+    // tx ty
+    SkMatrix matrix = SkMatrixFromPdfMatrix(array);
+
+    pdfContext->fGraphicsState.fMatrix.preConcat(matrix);
+
+#ifdef PDF_TRACE
+    printf("cm ");
+    for (int i = 0 ; i < 6 ; i++) {
+        printf("%f ", array[i]);
+    }
+    printf("\n");
+    SkTraceMatrix(pdfContext->fGraphicsState.fMatrix);
+#endif
+
+    return kOK_PdfResult;
+}
+
+//leading TL Set the text leading, Tl
+//, to leading, which is a number expressed in unscaled text
+//space units. Text leading is used only by the T*, ', and " operators. Initial value: 0.
+PdfResult PdfOp_TL(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    double ty = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
+
+    pdfContext->fGraphicsState.fTextLeading = ty;
+
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_Td(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    double ty = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
+    double tx = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
+
+    double array[6] = {1, 0, 0, 1, tx, ty};
+    SkMatrix matrix = SkMatrixFromPdfMatrix(array);
+
+    pdfContext->fGraphicsState.fMatrixTm.preConcat(matrix);
+    pdfContext->fGraphicsState.fMatrixTlm.preConcat(matrix);
+
+    return kPartial_PdfResult;
+}
+
+PdfResult PdfOp_TD(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    double ty = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
+    double tx = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
+
+    // TODO(edisonn): Create factory methods or constructors so podofo is hidden
+    PdfObject _ty(PdfVariant(-ty));
+    pdfContext->fObjectStack.push(new SkPdfNumber(&pdfContext->fPdfDoc->podofo(), &_ty));
+
+    PdfOp_TL(pdfContext, canvas, looper);
+
+    PdfObject vtx(PdfVariant(-(-tx)));  // TODO(edisonn): Hmm, the compiler thinks I have here a function pointer if we use (tx), but not -(-tx)
+    pdfContext->fObjectStack.push(new SkPdfNumber(&pdfContext->fPdfDoc->podofo(), &vtx));
+
+    PdfObject vty(PdfVariant(-(-ty)));
+    pdfContext->fObjectStack.push(new SkPdfNumber(&pdfContext->fPdfDoc->podofo(), &vty));
+
+    return PdfOp_Td(pdfContext, canvas, looper);
+}
+
+PdfResult PdfOp_Tm(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    double f = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
+    double e = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
+    double d = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
+    double c = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
+    double b = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
+    double a = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
+
+    double array[6];
+    array[0] = a;
+    array[1] = b;
+    array[2] = c;
+    array[3] = d;
+    array[4] = e;
+    array[5] = f;
+
+    SkMatrix matrix = SkMatrixFromPdfMatrix(array);
+    matrix.postConcat(pdfContext->fGraphicsState.fMatrix);
+
+    // TODO(edisonn): Text positioning.
+    pdfContext->fGraphicsState.fMatrixTm = matrix;
+    pdfContext->fGraphicsState.fMatrixTlm = matrix;;
+
+    return kPartial_PdfResult;
+}
+
+//— T* Move to the start of the next line. This operator has the same effect as the code
+//0 Tl Td
+//where Tl is the current leading parameter in the text state
+PdfResult PdfOp_T_star(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    PdfObject zero(PdfVariant(0.0));
+    PdfObject tl(PdfVariant(-(-pdfContext->fGraphicsState.fTextLeading)));
+
+    pdfContext->fObjectStack.push(new SkPdfNumber(&pdfContext->fPdfDoc->podofo(), &zero));
+    pdfContext->fObjectStack.push(new SkPdfNumber(&pdfContext->fPdfDoc->podofo(), &tl));
+    return PdfOp_Td(pdfContext, canvas, looper);
+}
+
+PdfResult PdfOp_m(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    if (pdfContext->fGraphicsState.fPathClosed) {
+        pdfContext->fGraphicsState.fPath.reset();
+        pdfContext->fGraphicsState.fPathClosed = false;
+    }
+
+    pdfContext->fGraphicsState.fCurPosY = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    pdfContext->fGraphicsState.fCurPosX = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+
+    pdfContext->fGraphicsState.fPath.moveTo(SkDoubleToScalar(pdfContext->fGraphicsState.fCurPosX),
+                                          SkDoubleToScalar(pdfContext->fGraphicsState.fCurPosY));
+
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_l(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    if (pdfContext->fGraphicsState.fPathClosed) {
+        pdfContext->fGraphicsState.fPath.reset();
+        pdfContext->fGraphicsState.fPathClosed = false;
+    }
+
+    pdfContext->fGraphicsState.fCurPosY = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    pdfContext->fGraphicsState.fCurPosX = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+
+    pdfContext->fGraphicsState.fPath.lineTo(SkDoubleToScalar(pdfContext->fGraphicsState.fCurPosX),
+                                          SkDoubleToScalar(pdfContext->fGraphicsState.fCurPosY));
+
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_c(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    if (pdfContext->fGraphicsState.fPathClosed) {
+        pdfContext->fGraphicsState.fPath.reset();
+        pdfContext->fGraphicsState.fPathClosed = false;
+    }
+
+    double y3 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    double x3 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    double y2 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    double x2 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    double y1 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    double x1 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+
+    pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToScalar(y1),
+                                            SkDoubleToScalar(x2), SkDoubleToScalar(y2),
+                                            SkDoubleToScalar(x3), SkDoubleToScalar(y3));
+
+    pdfContext->fGraphicsState.fCurPosX = x3;
+    pdfContext->fGraphicsState.fCurPosY = y3;
+
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_v(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    if (pdfContext->fGraphicsState.fPathClosed) {
+        pdfContext->fGraphicsState.fPath.reset();
+        pdfContext->fGraphicsState.fPathClosed = false;
+    }
+
+    double y3 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    double x3 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    double y2 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    double x2 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    double y1 = pdfContext->fGraphicsState.fCurPosY;
+    double x1 = pdfContext->fGraphicsState.fCurPosX;
+
+    pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToScalar(y1),
+                                            SkDoubleToScalar(x2), SkDoubleToScalar(y2),
+                                            SkDoubleToScalar(x3), SkDoubleToScalar(y3));
+
+    pdfContext->fGraphicsState.fCurPosX = x3;
+    pdfContext->fGraphicsState.fCurPosY = y3;
+
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_y(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    if (pdfContext->fGraphicsState.fPathClosed) {
+        pdfContext->fGraphicsState.fPath.reset();
+        pdfContext->fGraphicsState.fPathClosed = false;
+    }
+
+    double y3 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    double x3 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    double y2 = pdfContext->fGraphicsState.fCurPosY;
+    double x2 = pdfContext->fGraphicsState.fCurPosX;
+    double y1 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+    double x1 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
+
+    pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToScalar(y1),
+                                            SkDoubleToScalar(x2), SkDoubleToScalar(y2),
+                                            SkDoubleToScalar(x3), SkDoubleToScalar(y3));
+
+    pdfContext->fGraphicsState.fCurPosX = x3;
+    pdfContext->fGraphicsState.fCurPosY = y3;
+
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_re(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    if (pdfContext->fGraphicsState.fPathClosed) {
+        pdfContext->fGraphicsState.fPath.reset();
+        pdfContext->fGraphicsState.fPathClosed = false;
+    }
+
+    double height = pdfContext->fObjectStack.top()->asNumber()->value();      pdfContext->fObjectStack.pop();
+    double width = pdfContext->fObjectStack.top()->asNumber()->value();       pdfContext->fObjectStack.pop();
+    double y = pdfContext->fObjectStack.top()->asNumber()->value();           pdfContext->fObjectStack.pop();
+    double x = pdfContext->fObjectStack.top()->asNumber()->value();           pdfContext->fObjectStack.pop();
+
+    pdfContext->fGraphicsState.fPath.addRect(SkDoubleToScalar(x), SkDoubleToScalar(y),
+                                           SkDoubleToScalar(x + width), SkDoubleToScalar(y + height));
+
+    pdfContext->fGraphicsState.fCurPosX = x;
+    pdfContext->fGraphicsState.fCurPosY = y + height;
+
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_h(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fGraphicsState.fPath.close();
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_fillAndStroke(PdfContext* pdfContext, SkCanvas* canvas, bool fill, bool stroke, bool close, bool evenOdd) {
+    SkPath path = pdfContext->fGraphicsState.fPath;
+
+    if (close) {
+        path.close();
+    }
+
+    canvas->setMatrix(pdfContext->fGraphicsState.fMatrix);
+
+    SkPaint paint;
+
+    SkPoint line[2];
+    if (fill && !stroke && path.isLine(line)) {
+        paint.setStyle(SkPaint::kStroke_Style);
+
+        pdfContext->fGraphicsState.applyGraphicsState(&paint, false);
+        paint.setStrokeWidth(SkDoubleToScalar(0));
+
+        canvas->drawPath(path, paint);
+    } else {
+        if (fill) {
+            paint.setStyle(SkPaint::kFill_Style);
+            if (evenOdd) {
+                path.setFillType(SkPath::kEvenOdd_FillType);
+            }
+
+            pdfContext->fGraphicsState.applyGraphicsState(&paint, false);
+
+            canvas->drawPath(path, paint);
+        }
+
+        if (stroke) {
+            paint.setStyle(SkPaint::kStroke_Style);
+
+            pdfContext->fGraphicsState.applyGraphicsState(&paint, true);
+
+            path.setFillType(SkPath::kWinding_FillType);  // reset it, just in case it messes up the stroke
+            canvas->drawPath(path, paint);
+        }
+    }
+
+    pdfContext->fGraphicsState.fPath.reset();
+    // todo zoom ... other stuff ?
+
+    if (pdfContext->fGraphicsState.fHasClipPathToApply) {
+#ifndef PDF_DEBUG_NO_CLIPING
+        canvas->clipPath(pdfContext->fGraphicsState.fClipPath, SkRegion::kIntersect_Op, true);
+#endif
+    }
+
+    //pdfContext->fGraphicsState.fClipPath.reset();
+    pdfContext->fGraphicsState.fHasClipPathToApply = false;
+
+    return kPartial_PdfResult;
+
+}
+
+PdfResult PdfOp_S(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_fillAndStroke(pdfContext, canvas, false, true, false, false);
+}
+
+PdfResult PdfOp_s(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_fillAndStroke(pdfContext, canvas, false, true, true, false);
+}
+
+PdfResult PdfOp_F(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, false);
+}
+
+PdfResult PdfOp_f(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, false);
+}
+
+PdfResult PdfOp_f_star(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, true);
+}
+
+PdfResult PdfOp_B(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_fillAndStroke(pdfContext, canvas, true, true, false, false);
+}
+
+PdfResult PdfOp_B_star(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_fillAndStroke(pdfContext, canvas, true, true, false, true);
+}
+
+PdfResult PdfOp_b(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_fillAndStroke(pdfContext, canvas, true, true, true, false);
+}
+
+PdfResult PdfOp_b_star(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_fillAndStroke(pdfContext, canvas, true, true, true, true);
+}
+
+PdfResult PdfOp_n(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    canvas->setMatrix(pdfContext->fGraphicsState.fMatrix);
+    if (pdfContext->fGraphicsState.fHasClipPathToApply) {
+#ifndef PDF_DEBUG_NO_CLIPING
+        canvas->clipPath(pdfContext->fGraphicsState.fClipPath, SkRegion::kIntersect_Op, true);
+#endif
+    }
+
+    //pdfContext->fGraphicsState.fClipPath.reset();
+    pdfContext->fGraphicsState.fHasClipPathToApply = false;
+
+    pdfContext->fGraphicsState.fPathClosed = true;
+
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_BT(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fGraphicsState.fTextBlock   = true;
+    pdfContext->fGraphicsState.fMatrixTm = pdfContext->fGraphicsState.fMatrix;
+    pdfContext->fGraphicsState.fMatrixTlm = pdfContext->fGraphicsState.fMatrix;
+
+    return kPartial_PdfResult;
+}
+
+PdfResult PdfOp_ET(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    if (!pdfContext->fGraphicsState.fTextBlock) {
+        return kIgnoreError_PdfResult;
+    }
+    // TODO(edisonn): anything else to be done once we are done with draw text? Like restore stack?
+    return kPartial_PdfResult;
+}
+
+//font size Tf Set the text font, Tf
+//, to font and the text font size, Tfs, to size. font is the name of a
+//font resource in the Fontsubdictionary of the current resource dictionary; size is
+//a number representing a scale factor. There is no initial value for either font or
+//size; they must be specified explicitly using Tf before any text is shown.
+PdfResult PdfOp_Tf(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fGraphicsState.fCurFontSize = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+    std::string fontName = pdfContext->fObjectStack.top()->asName()->value();                           pdfContext->fObjectStack.pop();
+
+#ifdef PDF_TRACE
+    printf("font name: %s\n", fontName.c_str());
+    std::string str;
+    pdfContext->fGraphicsState.fResources->podofo()->ToString(str);
+    printf("Print Tf Resources: %s\n", str.c_str());
+    pdfContext->fGraphicsState.fResources->Font()->podofo()->ToString(str);
+    printf("Print Tf Resources/Font: %s\n", str.c_str());
+#endif
+
+    SkPdfFontDictionary* fd = NULL;
+    if (pdfContext->fGraphicsState.fResources->Font()) {
+        SkPdfObject* objFont = pdfContext->fGraphicsState.fResources->Font()->get(fontName.c_str());
+        mapFontDictionary(*objFont, &fd);
+
+#ifdef PDF_TRACE
+        objFont->podofo()->ToString(str);
+        printf("Print Font loaded: %s\n", str.c_str());
+        fd->podofo()->ToString(str);
+        printf("Print Font loaded and resolved and upgraded: %s\n", str.c_str());
+#endif
+
+    }
+
+    SkPdfFont* skfont = SkPdfFont::fontFromPdfDictionary(fd);
+
+    if (skfont) {
+        pdfContext->fGraphicsState.fSkFont = skfont;
+    }
+
+    return kPartial_PdfResult;
+}
+
+PdfResult PdfOp_Tj(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    if (!pdfContext->fGraphicsState.fTextBlock) {
+        // TODO(edisonn): try to recover and draw it any way?
+        return kIgnoreError_PdfResult;
+    }
+
+    PdfResult ret = DrawText(pdfContext,
+                             pdfContext->fObjectStack.top(),
+                             canvas);
+    pdfContext->fObjectStack.pop();
+
+    return ret;
+}
+
+PdfResult PdfOp_quote(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    if (!pdfContext->fGraphicsState.fTextBlock) {
+        // TODO(edisonn): try to recover and draw it any way?
+        return kIgnoreError_PdfResult;
+    }
+
+    PdfOp_T_star(pdfContext, canvas, looper);
+    // Do not pop, and push, just transfer the param to Tj
+    return PdfOp_Tj(pdfContext, canvas, looper);
+}
+
+PdfResult PdfOp_doublequote(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    if (!pdfContext->fGraphicsState.fTextBlock) {
+        // TODO(edisonn): try to recover and draw it any way?
+        return kIgnoreError_PdfResult;
+    }
+
+    SkPdfObject* str = pdfContext->fObjectStack.top();       pdfContext->fObjectStack.pop();
+    SkPdfObject* ac = pdfContext->fObjectStack.top();        pdfContext->fObjectStack.pop();
+    SkPdfObject* aw = pdfContext->fObjectStack.top();        pdfContext->fObjectStack.pop();
+
+    pdfContext->fObjectStack.push(aw);
+    PdfOp_Tw(pdfContext, canvas, looper);
+
+    pdfContext->fObjectStack.push(ac);
+    PdfOp_Tc(pdfContext, canvas, looper);
+
+    pdfContext->fObjectStack.push(str);
+    PdfOp_quote(pdfContext, canvas, looper);
+
+    return kPartial_PdfResult;
+}
+
+PdfResult PdfOp_TJ(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    if (!pdfContext->fGraphicsState.fTextBlock) {
+        // TODO(edisonn): try to recover and draw it any way?
+        return kIgnoreError_PdfResult;
+    }
+
+    SkPdfArray* array = pdfContext->fObjectStack.top()->asArray();
+    pdfContext->fObjectStack.pop();
+
+    for( int i=0; i<static_cast<int>(array->size()); i++ )
+    {
+        if( (*array)[i]->asString()) {
+            SkPdfObject* obj = (*array)[i];
+            DrawText(pdfContext,
+                     obj,
+                     canvas);
+        } else if ((*array)[i]->asInteger() || (*array)[i]->asNumber()) {
+            double dx = (*array)[i]->asNumber()->value();
+            SkMatrix matrix;
+            matrix.setAll(SkDoubleToScalar(1),
+                          SkDoubleToScalar(0),
+                          // TODO(edisonn): use writing mode, vertical/horizontal.
+                          SkDoubleToScalar(-dx),  // amount is substracted!!!
+                          SkDoubleToScalar(0),
+                          SkDoubleToScalar(1),
+                          SkDoubleToScalar(0),
+                          SkDoubleToScalar(0),
+                          SkDoubleToScalar(0),
+                          SkDoubleToScalar(1));
+
+            pdfContext->fGraphicsState.fMatrixTm.preConcat(matrix);
+        }
+    }
+    return kPartial_PdfResult;  // TODO(edisonn): Implement fully DrawText before returing OK.
+}
+
+PdfResult PdfOp_CS_cs(PdfContext* pdfContext, SkCanvas* canvas, PdfColorOperator* colorOperator) {
+    colorOperator->fColorSpace = pdfContext->fObjectStack.top()->asName()->value();    pdfContext->fObjectStack.pop();
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_CS(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_CS_cs(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
+}
+
+PdfResult PdfOp_cs(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_CS_cs(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
+}
+
+PdfResult PdfOp_SC_sc(PdfContext* pdfContext, SkCanvas* canvas, PdfColorOperator* colorOperator) {
+    double c[4];
+    pdf_int64 v[4];
+
+    int n = GetColorSpaceComponents(colorOperator->fColorSpace);
+
+    bool doubles = true;
+    if (colorOperator->fColorSpace == "Indexed") {
+        doubles = false;
+    }
+
+#ifdef PDF_TRACE
+    printf("color space = %s, N = %i\n", colorOperator->fColorSpace.c_str(), n);
+#endif
+
+    for (int i = n - 1; i >= 0 ; i--) {
+        if (doubles) {
+            c[i] = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+        } else {
+            v[i] = pdfContext->fObjectStack.top()->asInteger()->value();   pdfContext->fObjectStack.pop();
+        }
+    }
+
+    // TODO(edisonn): Now, set that color. Only DeviceRGB supported.
+    if (colorOperator->fColorSpace == "DeviceRGB") {
+        colorOperator->setRGBColor(SkColorSetRGB(255*c[0], 255*c[1], 255*c[2]));
+    }
+    return kPartial_PdfResult;
+}
+
+PdfResult PdfOp_SC(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_SC_sc(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
+}
+
+PdfResult PdfOp_sc(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_SC_sc(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
+}
+
+PdfResult PdfOp_SCN_scn(PdfContext* pdfContext, SkCanvas* canvas, PdfColorOperator* colorOperator) {
+    PdfString name;
+
+    if (pdfContext->fObjectStack.top()->asName()) {
+        pdfContext->fObjectStack.pop();
+    }
+
+    // TODO(edisonn): SCN supports more color spaces than SCN. Read and implement spec.
+    PdfOp_SC_sc(pdfContext, canvas, colorOperator);
+
+    return kPartial_PdfResult;
+}
+
+PdfResult PdfOp_SCN(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_SCN_scn(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
+}
+
+PdfResult PdfOp_scn(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_SCN_scn(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
+}
+
+PdfResult PdfOp_G_g(PdfContext* pdfContext, SkCanvas* canvas, PdfColorOperator* colorOperator) {
+    double gray = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+    return kNYI_PdfResult;
+}
+
+PdfResult PdfOp_G(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_G_g(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
+}
+
+PdfResult PdfOp_g(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_G_g(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
+}
+
+PdfResult PdfOp_RG_rg(PdfContext* pdfContext, SkCanvas* canvas, PdfColorOperator* colorOperator) {
+    double b = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+    double g = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+    double r = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+
+    colorOperator->fColorSpace = "DeviceRGB";
+    colorOperator->setRGBColor(SkColorSetRGB(255*r, 255*g, 255*b));
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_RG(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_RG_rg(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
+}
+
+PdfResult PdfOp_rg(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_RG_rg(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
+}
+
+PdfResult PdfOp_K_k(PdfContext* pdfContext, SkCanvas* canvas, PdfColorOperator* colorOperator) {
+    // TODO(edisonn): spec has some rules about overprint, implement them.
+    double k = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+    double y = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+    double m = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+    double c = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+
+    colorOperator->fColorSpace = "DeviceCMYK";
+    // TODO(edisonn): Set color.
+    return kNYI_PdfResult;
+}
+
+PdfResult PdfOp_K(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_K_k(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
+}
+
+PdfResult PdfOp_k(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return PdfOp_K_k(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
+}
+
+PdfResult PdfOp_W(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fGraphicsState.fClipPath = pdfContext->fGraphicsState.fPath;
+    pdfContext->fGraphicsState.fHasClipPathToApply = true;
+
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_W_star(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fGraphicsState.fClipPath = pdfContext->fGraphicsState.fPath;
+
+#ifdef PDF_TRACE
+    if (pdfContext->fGraphicsState.fClipPath.isRect(NULL)) {
+        printf("CLIP IS RECT\n");
+    }
+#endif
+
+    // TODO(edisonn): there seem to be a bug with clipPath of a rect with even odd.
+    pdfContext->fGraphicsState.fClipPath.setFillType(SkPath::kEvenOdd_FillType);
+    pdfContext->fGraphicsState.fHasClipPathToApply = true;
+
+    return kPartial_PdfResult;
+}
+
+PdfResult PdfOp_BX(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    *looper = new PdfCompatibilitySectionLooper();
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_EX(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+#ifdef ASSERT_BAD_PDF_OPS
+    SkASSERT(false);  // EX must be consumed by PdfCompatibilitySectionLooper, but let's
+                      // have the assert when testing good pdfs.
+#endif
+    return kIgnoreError_PdfResult;
+}
+
+PdfResult PdfOp_BI(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    *looper = new PdfInlineImageLooper();
+    return kOK_PdfResult;
+}
+
+PdfResult PdfOp_ID(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+#ifdef ASSERT_BAD_PDF_OPS
+    SkASSERT(false);  // must be processed in inline image looper, but let's
+                      // have the assert when testing good pdfs.
+#endif
+    return kIgnoreError_PdfResult;
+}
+
+PdfResult PdfOp_EI(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+#ifdef ASSERT_BAD_PDF_OPS
+    SkASSERT(false);  // must be processed in inline image looper, but let's
+                      // have the assert when testing good pdfs.
+#endif
+    return kIgnoreError_PdfResult;
+}
+
+//lineWidth w Set the line width in the graphics state (see “Line Width” on page 152).
+PdfResult PdfOp_w(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    double lineWidth = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+    pdfContext->fGraphicsState.fLineWidth = lineWidth;
+
+    return kOK_PdfResult;
+}
+
+//lineCap J Set the line cap style in the graphics state (see “Line Cap Style” on page 153).
+PdfResult PdfOp_J(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fObjectStack.pop();
+    //double lineCap = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//lineJoin j Set the line join style in the graphics state (see “Line Join Style” on page 153).
+PdfResult PdfOp_j(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fObjectStack.pop();
+    //double lineJoin = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//miterLimit M Set the miter limit in the graphics state (see “Miter Limit” on page 153).
+PdfResult PdfOp_M(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fObjectStack.pop();
+    //double miterLimit = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//dashArray dashPhase d Set the line dash pattern in the graphics state (see “Line Dash Pattern” on
+//page 155).
+PdfResult PdfOp_d(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fObjectStack.pop();
+    pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//intent ri (PDF 1.1) Set the color rendering intent in the graphics state (see “Rendering Intents” on page 197).
+PdfResult PdfOp_ri(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//flatness i Set the flatness tolerance in the graphics state (see Section 6.5.1, “Flatness
+//Tolerance”). flatness is a number in the range 0 to 100; a value of 0 speci-
+//fies the output device’s default flatness tolerance.
+PdfResult PdfOp_i(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//dictName gs (PDF 1.2) Set the specified parameters in the graphics state. dictName is
+//the name of a graphics state parameter dictionary in the ExtGState subdictionary of the current resource dictionary (see the next section).
+PdfResult PdfOp_gs(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    std::string name = pdfContext->fObjectStack.top()->asName()->value();    pdfContext->fObjectStack.pop();
+
+#ifdef PDF_TRACE
+    std::string str;
+#endif
+
+    //Next, get the ExtGState Dictionary from the Resource Dictionary:
+    const SkPdfDictionary* extGStateDictionary = pdfContext->fGraphicsState.fResources->ExtGState();
+
+    if (extGStateDictionary == NULL) {
+#ifdef PDF_TRACE
+        printf("ExtGState is NULL!\n");
+#endif
+        return kIgnoreError_PdfResult;
+    }
+
+    SkPdfObject* value = extGStateDictionary->get(name.c_str());
+
+#ifdef PDF_TRACE
+//    value->ToString(str);
+//    printf("gs object value: %s\n", str.c_str());
+#endif
+
+    SkPdfGraphicsStateDictionary* gs = NULL;
+    mapGraphicsStateDictionary(*value, &gs);
+
+    // TODO(edisonn): now load all those properties in graphic state.
+    if (gs == NULL) {
+        return kIgnoreError_PdfResult;
+    }
+
+    if (gs->has_CA()) {
+        pdfContext->fGraphicsState.fStroking.fOpacity = gs->CA();
+    }
+
+    if (gs->has_ca()) {
+        pdfContext->fGraphicsState.fNonStroking.fOpacity = gs->ca();
+    }
+
+    if (gs->has_LW()) {
+        pdfContext->fGraphicsState.fLineWidth = gs->LW();
+    }
+
+
+
+    return kNYI_PdfResult;
+}
+
+//charSpace Tc Set the character spacing, Tc
+//, to charSpace, which is a number expressed in unscaled text space units. Character spacing is used by the Tj, TJ, and ' operators.
+//Initial value: 0.
+PdfResult PdfOp_Tc(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    double charSpace = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+    pdfContext->fGraphicsState.fCharSpace = charSpace;
+
+    return kOK_PdfResult;
+}
+
+//wordSpace Tw Set the word spacing, T
+//w
+//, to wordSpace, which is a number expressed in unscaled
+//text space units. Word spacing is used by the Tj, TJ, and ' operators. Initial
+//value: 0.
+PdfResult PdfOp_Tw(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    double wordSpace = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+    pdfContext->fGraphicsState.fWordSpace = wordSpace;
+
+    return kOK_PdfResult;
+}
+
+//scale Tz Set the horizontal scaling, Th
+//, to (scale ˜ 100). scale is a number specifying the
+//percentage of the normal width. Initial value: 100 (normal width).
+PdfResult PdfOp_Tz(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    double scale = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//render Tr Set the text rendering mode, T
+//mode, to render, which is an integer. Initial value: 0.
+PdfResult PdfOp_Tr(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    double render = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+//rise Ts Set the text rise, Trise, to rise, which is a number expressed in unscaled text space
+//units. Initial value: 0.
+PdfResult PdfOp_Ts(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    double rise = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//wx wy d0
+PdfResult PdfOp_d0(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fObjectStack.pop();
+    pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//wx wy llx lly urx ury d1
+PdfResult PdfOp_d1(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fObjectStack.pop();
+    pdfContext->fObjectStack.pop();
+    pdfContext->fObjectStack.pop();
+    pdfContext->fObjectStack.pop();
+    pdfContext->fObjectStack.pop();
+    pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//name sh
+PdfResult PdfOp_sh(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//name Do
+PdfResult PdfOp_Do(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    std::string name = pdfContext->fObjectStack.top()->asName()->value();    pdfContext->fObjectStack.pop();
+
+    SkPdfDictionary* xObject =  pdfContext->fGraphicsState.fResources->XObject();
+
+    if (xObject == NULL) {
+#ifdef PDF_TRACE
+        printf("XObject is NULL!\n");
+#endif
+        return kIgnoreError_PdfResult;
+    }
+
+    SkPdfObject* value = xObject->get(name.c_str());
+
+#ifdef PDF_TRACE
+//    value->ToString(str);
+//    printf("Do object value: %s\n", str.c_str());
+#endif
+
+    return doXObject(pdfContext, canvas, *value);
+}
+
+//tag MP Designate a marked-content point. tag is a name object indicating the role or
+//significance of the point.
+PdfResult PdfOp_MP(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//tag properties DP Designate a marked-content point with an associated property list. tag is a
+//name object indicating the role or significance of the point; properties is
+//either an inline dictionary containing the property list or a name object
+//associated with it in the Properties subdictionary of the current resource
+//dictionary (see Section 9.5.1, “Property Lists”).
+PdfResult PdfOp_DP(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fObjectStack.pop();
+    pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//tag BMC Begin a marked-content sequence terminated by a balancing EMC operator.
+//tag is a name object indicating the role or significance of the sequence.
+PdfResult PdfOp_BMC(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//tag properties BDC Begin a marked-content sequence with an associated property list, terminated
+//by a balancing EMCoperator. tag is a name object indicating the role or significance of the sequence; propertiesis either an inline dictionary containing the
+//property list or a name object associated with it in the Properties subdictionary of the current resource dictionary (see Section 9.5.1, “Property Lists”).
+PdfResult PdfOp_BDC(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    pdfContext->fObjectStack.pop();
+    pdfContext->fObjectStack.pop();
+
+    return kNYI_PdfResult;
+}
+
+//— EMC End a marked-content sequence begun by a BMC or BDC operator.
+PdfResult PdfOp_EMC(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+    return kNYI_PdfResult;
+}
+
+void initPdfOperatorRenderes() {
+    static bool gInitialized = false;
+    if (gInitialized) {
+        return;
+    }
+
+    gPdfOps["q"] =      PdfOp_q;
+    gPdfOps["Q"] =      PdfOp_Q;
+    gPdfOps["cm"] =     PdfOp_cm;
+
+    gPdfOps["TD"] =     PdfOp_TD;
+    gPdfOps["Td"] =     PdfOp_Td;
+    gPdfOps["Tm"] =     PdfOp_Tm;
+    gPdfOps["T*"] =     PdfOp_T_star;
+
+    gPdfOps["m"] =      PdfOp_m;
+    gPdfOps["l"] =      PdfOp_l;
+    gPdfOps["c"] =      PdfOp_c;
+    gPdfOps["v"] =      PdfOp_v;
+    gPdfOps["y"] =      PdfOp_y;
+    gPdfOps["h"] =      PdfOp_h;
+    gPdfOps["re"] =     PdfOp_re;
+
+    gPdfOps["S"] =      PdfOp_S;
+    gPdfOps["s"] =      PdfOp_s;
+    gPdfOps["f"] =      PdfOp_f;
+    gPdfOps["F"] =      PdfOp_F;
+    gPdfOps["f*"] =     PdfOp_f_star;
+    gPdfOps["B"] =      PdfOp_B;
+    gPdfOps["B*"] =     PdfOp_B_star;
+    gPdfOps["b"] =      PdfOp_b;
+    gPdfOps["b*"] =     PdfOp_b_star;
+    gPdfOps["n"] =      PdfOp_n;
+
+    gPdfOps["BT"] =     PdfOp_BT;
+    gPdfOps["ET"] =     PdfOp_ET;
+
+    gPdfOps["Tj"] =     PdfOp_Tj;
+    gPdfOps["'"] =      PdfOp_quote;
+    gPdfOps["\""] =     PdfOp_doublequote;
+    gPdfOps["TJ"] =     PdfOp_TJ;
+
+    gPdfOps["CS"] =     PdfOp_CS;
+    gPdfOps["cs"] =     PdfOp_cs;
+    gPdfOps["SC"] =     PdfOp_SC;
+    gPdfOps["SCN"] =    PdfOp_SCN;
+    gPdfOps["sc"] =     PdfOp_sc;
+    gPdfOps["scn"] =    PdfOp_scn;
+    gPdfOps["G"] =      PdfOp_G;
+    gPdfOps["g"] =      PdfOp_g;
+    gPdfOps["RG"] =     PdfOp_RG;
+    gPdfOps["rg"] =     PdfOp_rg;
+    gPdfOps["K"] =      PdfOp_K;
+    gPdfOps["k"] =      PdfOp_k;
+
+    gPdfOps["W"] =      PdfOp_W;
+    gPdfOps["W*"] =     PdfOp_W_star;
+
+    gPdfOps["BX"] =     PdfOp_BX;
+    gPdfOps["EX"] =     PdfOp_EX;
+
+    gPdfOps["BI"] =     PdfOp_BI;
+    gPdfOps["ID"] =     PdfOp_ID;
+    gPdfOps["EI"] =     PdfOp_EI;
+
+    gPdfOps["w"] =      PdfOp_w;
+    gPdfOps["J"] =      PdfOp_J;
+    gPdfOps["j"] =      PdfOp_j;
+    gPdfOps["M"] =      PdfOp_M;
+    gPdfOps["d"] =      PdfOp_d;
+    gPdfOps["ri"] =     PdfOp_ri;
+    gPdfOps["i"] =      PdfOp_i;
+    gPdfOps["gs"] =     PdfOp_gs;
+
+    gPdfOps["Tc"] =     PdfOp_Tc;
+    gPdfOps["Tw"] =     PdfOp_Tw;
+    gPdfOps["Tz"] =     PdfOp_Tz;
+    gPdfOps["TL"] =     PdfOp_TL;
+    gPdfOps["Tf"] =     PdfOp_Tf;
+    gPdfOps["Tr"] =     PdfOp_Tr;
+    gPdfOps["Ts"] =     PdfOp_Ts;
+
+    gPdfOps["d0"] =     PdfOp_d0;
+    gPdfOps["d1"] =     PdfOp_d1;
+
+    gPdfOps["sh"] =     PdfOp_sh;
+
+    gPdfOps["Do"] =     PdfOp_Do;
+
+    gPdfOps["MP"] =     PdfOp_MP;
+    gPdfOps["DP"] =     PdfOp_DP;
+    gPdfOps["BMC"] =    PdfOp_BMC;
+    gPdfOps["BDC"] =    PdfOp_BDC;
+    gPdfOps["EMC"] =    PdfOp_EMC;
+
+    gInitialized = true;
+}
+
+class InitPdfOps {
+public:
+    InitPdfOps() {
+        initPdfOperatorRenderes();
+    }
+};
+
+InitPdfOps gInitPdfOps;
+
+void reportPdfRenderStats() {
+    std::map<std::string, int>::iterator iter;
+
+    for (int i = 0 ; i < kCount_PdfResult; i++) {
+        for (iter = gRenderStats[i].begin(); iter != gRenderStats[i].end(); ++iter) {
+            printf("%s: %s -> count %i\n", gRenderStatsNames[i], iter->first.c_str(), iter->second);
+        }
+    }
+}
+
+PdfResult PdfMainLooper::consumeToken(PdfToken& token) {
+    if (token.fType == kKeyword_TokenType)
+    {
+        // TODO(edisonn): log trace flag (verbose, error, info, warning, ...)
+        PdfOperatorRenderer pdfOperatorRenderer = gPdfOps[token.fKeyword];
+        if (pdfOperatorRenderer) {
+            // caller, main work is done by pdfOperatorRenderer(...)
+            PdfTokenLooper* childLooper = NULL;
+            gRenderStats[pdfOperatorRenderer(fPdfContext, fCanvas, &childLooper)][token.fKeyword]++;
+
+            if (childLooper) {
+                childLooper->setUp(this);
+                childLooper->loop();
+                delete childLooper;
+            }
+        } else {
+            gRenderStats[kUnsupported_PdfResult][token.fKeyword]++;
+        }
+    }
+    else if (token.fType == kObject_TokenType)
+    {
+        fPdfContext->fObjectStack.push( token.fObject );
+    }
+    else if ( token.fType == kImageData_TokenType) {
+        // TODO(edisonn): implement inline image.
+    }
+    else {
+        return kIgnoreError_PdfResult;
+    }
+    return kOK_PdfResult;
+}
+
+void PdfMainLooper::loop() {
+    PdfToken token;
+    while (readToken(fTokenizer, &token)) {
+        consumeToken(token);
+    }
+}
+
+PdfResult PdfInlineImageLooper::consumeToken(PdfToken& token) {
+    //pdfContext.fInlineImage.fKeyValuePairs[key] = value;
+    return kNYI_PdfResult;
+}
+
+void PdfInlineImageLooper::loop() {
+    PdfToken token;
+    while (readToken(fTokenizer, &token)) {
+        if (token.fType == kKeyword_TokenType && strcmp(token.fKeyword, "BX") == 0) {
+            PdfTokenLooper* looper = new PdfCompatibilitySectionLooper();
+            looper->setUp(this);
+            looper->loop();
+        } else {
+            if (token.fType == kKeyword_TokenType && strcmp(token.fKeyword, "EI") == 0) {
+                done();
+                return;
+            }
+
+            consumeToken(token);
+        }
+    }
+    // TODO(edisonn): report error/warning, EOF without EI.
+}
+
+PdfResult PdfInlineImageLooper::done() {
+
+    // TODO(edisonn): long to short names
+    // TODO(edisonn): set properties in a map
+    // TODO(edisonn): extract bitmap stream, check if PoDoFo has public utilities to uncompress
+    // the stream.
+
+    SkBitmap bitmap;
+    setup_bitmap(&bitmap, 50, 50, SK_ColorRED);
+
+    // TODO(edisonn): matrix use.
+    // Draw dummy red square, to show the prezence of the inline image.
+    fCanvas->drawBitmap(bitmap,
+                       SkDoubleToScalar(0),
+                       SkDoubleToScalar(0),
+                       NULL);
+    return kNYI_PdfResult;
+}
+
+PdfResult PdfCompatibilitySectionLooper::consumeToken(PdfToken& token) {
+    return fParent->consumeToken(token);
+}
+
+void PdfCompatibilitySectionLooper::loop() {
+    // TODO(edisonn): save stacks position, or create a new stack?
+    // TODO(edisonn): what happens if we pop out more variables then when we started?
+    // restore them? fail? We could create a new operands stack for every new BX/EX section,
+    // pop-ing too much will not affect outside the section.
+    PdfToken token;
+    while (readToken(fTokenizer, &token)) {
+        if (token.fType == kKeyword_TokenType && strcmp(token.fKeyword, "BX") == 0) {
+            PdfTokenLooper* looper = new PdfCompatibilitySectionLooper();
+            looper->setUp(this);
+            looper->loop();
+            delete looper;
+        } else {
+            if (token.fType == kKeyword_TokenType && strcmp(token.fKeyword, "EX") == 0) break;
+            fParent->consumeToken(token);
+        }
+    }
+    // TODO(edisonn): restore stack.
+}
+
+// TODO(edisonn): fix PoDoFo load ~/crashing/Shading.pdf
+// TODO(edisonn): Add API for Forms viewing and editing
+// e.g. SkBitmap getPage(int page);
+//      int formsCount();
+//      SkForm getForm(int formID); // SkForm(SkRect, .. other data)
+// TODO (edisonn): Add intend when loading pdf, for example: for viewing, parsing all content, ...
+// if we load the first page, and we zoom to fit to screen horizontally, then load only those
+// resources needed, so the preview is fast.
+// TODO (edisonn): hide parser/tokenizer behind and interface and a query language, and resolve
+// references automatically.
+
+bool SkPdfViewer::load(const SkString inputFileName, SkPicture* out) {
+    try
+    {
+        std::cout << "Init: " << inputFileName.c_str() << std::endl;
+
+        SkPdfDoc doc(inputFileName.c_str());
+        if (!doc.pages())
+        {
+            std::cout << "ERROR: Empty Document" << inputFileName.c_str() << std::endl;
+            return false;
+        } else {
+
+            for (int pn = 0; pn < doc.pages(); ++pn) {
+                // TODO(edisonn): implement inheritance properties as per PDF spec
+                //SkRect rect = page->MediaBox();
+                SkRect rect = doc.MediaBox(pn);
+
+    #ifdef PDF_TRACE
+                printf("Page Width: %f, Page Height: %f\n", SkScalarToDouble(rect.width()), SkScalarToDouble(rect.height()));
+    #endif
+
+                // TODO(edisonn): page->GetCropBox(), page->GetTrimBox() ... how to use?
+
+                SkBitmap bitmap;
+    #ifdef PDF_DEBUG_3X
+                setup_bitmap(&bitmap, 3 * (int)SkScalarToDouble(rect.width()), 3 * (int)SkScalarToDouble(rect.height()));
+    #else
+                setup_bitmap(&bitmap, (int)SkScalarToDouble(rect.width()), (int)SkScalarToDouble(rect.height()));
+    #endif
+                SkAutoTUnref<SkDevice> device(SkNEW_ARGS(SkDevice, (bitmap)));
+                SkCanvas canvas(device);
+
+                gDumpBitmap = &bitmap;
+
+                doc.drawPage(pn, &canvas);
+
+                SkString out;
+                out.appendf("%s-%i.png", inputFileName.c_str(), pn);
+                SkImageEncoder::EncodeFile(out.c_str(), bitmap, SkImageEncoder::kPNG_Type, 100);
+            }
+            return true;
+        }
+    }
+    catch( PdfError & e )
+    {
+        std::cout << "ERROR: PDF can't be parsed!" << inputFileName.c_str() << std::endl;
+        return false;
+    }
+
+    return true;
+}
+
+
diff --git a/experimental/PdfViewer/SkPdfParser.h b/experimental/PdfViewer/SkPdfParser.h
index 7e2cd0e..c156004 100644
--- a/experimental/PdfViewer/SkPdfParser.h
+++ b/experimental/PdfViewer/SkPdfParser.h
@@ -28,8 +28,8 @@
 };
 
 class SkPdfTokenizer {
-    PdfContentsTokenizer* fTokenizer;
     PdfMemDocument* fDoc;
+    PdfContentsTokenizer* fTokenizer;
 
     char* fUncompressedStream;
     pdf_long fUncompressedStreamLength;
@@ -39,8 +39,8 @@
     PdfToken fPutBack;
 
 public:
-    SkPdfTokenizer(PdfMemDocument* doc = NULL, PdfContentsTokenizer* tokenizer = NULL) : fDoc(doc), fTokenizer(tokenizer), fEmpty(false), fUncompressedStream(NULL), fUncompressedStreamLength(0), fHasPutBack(false) {}
-    SkPdfTokenizer(const SkPdfObject* objWithStream) : fDoc(NULL), fTokenizer(NULL), fHasPutBack(false), fEmpty(false) {
+    SkPdfTokenizer(PdfMemDocument* doc = NULL, PdfContentsTokenizer* tokenizer = NULL) : fDoc(doc), fTokenizer(tokenizer), fUncompressedStream(NULL), fUncompressedStreamLength(0),  fEmpty(false), fHasPutBack(false) {}
+    SkPdfTokenizer(const SkPdfObject* objWithStream) : fDoc(NULL), fTokenizer(NULL), fEmpty(false), fHasPutBack(false) {
         fUncompressedStream = NULL;
         fUncompressedStreamLength = 0;
 
@@ -60,7 +60,7 @@
 
     }
 
-    SkPdfTokenizer(const char* buffer, int len) : fDoc(NULL), fTokenizer(NULL), fHasPutBack(false), fUncompressedStream(NULL), fUncompressedStreamLength(0), fEmpty(false) {
+    SkPdfTokenizer(const char* buffer, int len) : fDoc(NULL), fTokenizer(NULL), fUncompressedStream(NULL), fUncompressedStreamLength(0), fEmpty(false), fHasPutBack(false) {
         try {
             fTokenizer = new PdfContentsTokenizer(buffer, len);
         } catch (PdfError& e) {
@@ -107,7 +107,7 @@
             case ePdfContentsType_Variant: {
                     token->fType = kObject_TokenType;
                     PdfObject* obj = new PdfObject(var);
-                    PodofoMapper::map(*fDoc, *obj, &token->fObject);
+                    mapObject(*fDoc, *obj, &token->fObject);
                 }
                 break;
 
@@ -127,6 +127,91 @@
     }
 };
 
+extern "C" PdfContext* gPdfContext;
+extern "C" SkBitmap* gDumpBitmap;
+extern "C" SkCanvas* gDumpCanvas;
+
+// TODO(edisonn): move in trace util.
+#ifdef PDF_TRACE
+static void SkTraceMatrix(const SkMatrix& matrix, const char* sz = "") {
+    printf("SkMatrix %s ", sz);
+    for (int i = 0 ; i < 9 ; i++) {
+        printf("%f ", SkScalarToDouble(matrix.get(i)));
+    }
+    printf("\n");
+}
+
+static void SkTraceRect(const SkRect& rect, const char* sz = "") {
+    printf("SkRect %s ", sz);
+    printf("x = %f ", SkScalarToDouble(rect.x()));
+    printf("y = %f ", SkScalarToDouble(rect.y()));
+    printf("w = %f ", SkScalarToDouble(rect.width()));
+    printf("h = %f ", SkScalarToDouble(rect.height()));
+    printf("\n");
+}
+
+#else
+#define SkTraceMatrix(a,b)
+#define SkTraceRect(a,b)
+#endif
+
+// TODO(edisonn): Document PdfTokenLooper and subclasses.
+class PdfTokenLooper {
+protected:
+    PdfTokenLooper* fParent;
+    SkPdfTokenizer* fTokenizer;
+    PdfContext* fPdfContext;
+    SkCanvas* fCanvas;
+
+public:
+    PdfTokenLooper(PdfTokenLooper* parent,
+                   SkPdfTokenizer* tokenizer,
+                   PdfContext* pdfContext,
+                   SkCanvas* canvas)
+        : fParent(parent), fTokenizer(tokenizer), fPdfContext(pdfContext), fCanvas(canvas) {}
+
+    virtual PdfResult consumeToken(PdfToken& token) = 0;
+    virtual void loop() = 0;
+
+    void setUp(PdfTokenLooper* parent) {
+        fParent = parent;
+        fTokenizer = parent->fTokenizer;
+        fPdfContext = parent->fPdfContext;
+        fCanvas = parent->fCanvas;
+    }
+};
+
+class PdfMainLooper : public PdfTokenLooper {
+public:
+    PdfMainLooper(PdfTokenLooper* parent,
+                  SkPdfTokenizer* tokenizer,
+                  PdfContext* pdfContext,
+                  SkCanvas* canvas)
+        : PdfTokenLooper(parent, tokenizer, pdfContext, canvas) {}
+
+    virtual PdfResult consumeToken(PdfToken& token);
+    virtual void loop();
+};
+
+class PdfInlineImageLooper : public PdfTokenLooper {
+public:
+    PdfInlineImageLooper()
+        : PdfTokenLooper(NULL, NULL, NULL, NULL) {}
+
+    virtual PdfResult consumeToken(PdfToken& token);
+    virtual void loop();
+    PdfResult done();
+};
+
+class PdfCompatibilitySectionLooper : public PdfTokenLooper {
+public:
+    PdfCompatibilitySectionLooper()
+        : PdfTokenLooper(NULL, NULL, NULL, NULL) {}
+
+    virtual PdfResult consumeToken(PdfToken& token);
+    virtual void loop();
+};
+
 class SkPdfDoc {
     PdfMemDocument fDoc;
 public:
@@ -139,10 +224,20 @@
         return fDoc.GetPageCount();
     }
 
+    double width(int n) {
+        PdfRect rect = fDoc.GetPage(n)->GetMediaBox();
+        return rect.GetWidth() + rect.GetLeft();
+    }
+
+    double height(int n) {
+        PdfRect rect = fDoc.GetPage(n)->GetMediaBox();
+        return rect.GetHeight() + rect.GetBottom();
+    }
+
     // Can return NULL
     SkPdfPageObjectDictionary* page(int n) {
         SkPdfPageObjectDictionary* page = NULL;
-        PodofoMapper::map(fDoc, *fDoc.GetPage(n)->GetObject(), &page);
+        mapPageObjectDictionary(fDoc, *fDoc.GetPage(n)->GetObject(), &page);
         return page;
     }
 
@@ -155,10 +250,89 @@
         return skrect;
     }
 
+    void drawPage(int n, SkCanvas* canvas) {
+        SkPdfPageObjectDictionary* pg = page(n);
+        SkPdfTokenizer* tokenizer = tokenizerOfPage(n);
+
+        PdfContext pdfContext(this);
+        pdfContext.fOriginalMatrix = SkMatrix::I();
+        pdfContext.fGraphicsState.fResources = NULL;
+        mapResourceDictionary(*pg->Resources(), &pdfContext.fGraphicsState.fResources);
+
+        gPdfContext = &pdfContext;
+        gDumpCanvas = canvas;
+
+        // TODO(edisonn): get matrix stuff right.
+        // TODO(edisonn): add DPI/scale/zoom.
+        SkScalar z = SkIntToScalar(0);
+        SkRect rect = MediaBox(n);
+        SkScalar w = rect.width();
+        SkScalar h = rect.height();
+
+        SkPoint pdfSpace[4] = {SkPoint::Make(z, z), SkPoint::Make(w, z), SkPoint::Make(w, h), SkPoint::Make(z, h)};
+//                SkPoint skiaSpace[4] = {SkPoint::Make(z, h), SkPoint::Make(w, h), SkPoint::Make(w, z), SkPoint::Make(z, z)};
+
+        // TODO(edisonn): add flag for this app to create sourunding buffer zone
+        // TODO(edisonn): add flagg for no clipping.
+        // Use larger image to make sure we do not draw anything outside of page
+        // could be used in tests.
+
+#ifdef PDF_DEBUG_3X
+        SkPoint skiaSpace[4] = {SkPoint::Make(w+z, h+h), SkPoint::Make(w+w, h+h), SkPoint::Make(w+w, h+z), SkPoint::Make(w+z, h+z)};
+#else
+        SkPoint skiaSpace[4] = {SkPoint::Make(z, h), SkPoint::Make(w, h), SkPoint::Make(w, z), SkPoint::Make(z, z)};
+#endif
+        //SkPoint pdfSpace[2] = {SkPoint::Make(z, z), SkPoint::Make(w, h)};
+        //SkPoint skiaSpace[2] = {SkPoint::Make(w, z), SkPoint::Make(z, h)};
+
+        //SkPoint pdfSpace[2] = {SkPoint::Make(z, z), SkPoint::Make(z, h)};
+        //SkPoint skiaSpace[2] = {SkPoint::Make(z, h), SkPoint::Make(z, z)};
+
+        //SkPoint pdfSpace[3] = {SkPoint::Make(z, z), SkPoint::Make(z, h), SkPoint::Make(w, h)};
+        //SkPoint skiaSpace[3] = {SkPoint::Make(z, h), SkPoint::Make(z, z), SkPoint::Make(w, 0)};
+
+        SkAssertResult(pdfContext.fOriginalMatrix.setPolyToPoly(pdfSpace, skiaSpace, 4));
+        SkTraceMatrix(pdfContext.fOriginalMatrix, "Original matrix");
+
+
+        pdfContext.fGraphicsState.fMatrix = pdfContext.fOriginalMatrix;
+        pdfContext.fGraphicsState.fMatrixTm = pdfContext.fGraphicsState.fMatrix;
+        pdfContext.fGraphicsState.fMatrixTlm = pdfContext.fGraphicsState.fMatrix;
+
+        canvas->setMatrix(pdfContext.fOriginalMatrix);
+
+#ifndef PDF_DEBUG_NO_PAGE_CLIPING
+        canvas->clipRect(SkRect::MakeXYWH(z, z, w, h), SkRegion::kIntersect_Op, true);
+#endif
+
+// erase with red before?
+//        SkPaint paint;
+//        paint.setColor(SK_ColorRED);
+//        canvas->drawRect(rect, paint);
+
+        PdfMainLooper looper(NULL, tokenizer, &pdfContext, canvas);
+        looper.loop();
+
+        delete tokenizer;
+
+
+        canvas->flush();
+    }
+
     SkPdfTokenizer* tokenizerOfPage(int n) {
         PdfContentsTokenizer* t = new PdfContentsTokenizer(fDoc.GetPage(n));
         return new SkPdfTokenizer(&fDoc, t);
     }
 };
 
+// TODO(edisonn): move in another file
+class SkPdfViewer : public SkRefCnt {
+public:
+
+  bool load(const SkString inputFileName, SkPicture* out);
+  bool write(void*) const { return false; }
+};
+
+void reportPdfRenderStats();
+
 #endif  // SkPdfParser_DEFINED
diff --git a/experimental/PdfViewer/SkPdfUtils.cpp b/experimental/PdfViewer/SkPdfUtils.cpp
index e69de29..29e3548 100644
--- a/experimental/PdfViewer/SkPdfUtils.cpp
+++ b/experimental/PdfViewer/SkPdfUtils.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfUtils.h"
+
+bool ArrayFromDictionary(const PdfMemDocument* pdfDoc,
+                         const PdfDictionary& dict,
+                         const char* key,
+                         const char* abr,
+                         SkPdfArray* data) {return false;}
+
+bool FileSpecFromDictionary(const PdfMemDocument* pdfDoc,
+                         const PdfDictionary& dict,
+                         const char* key,
+                         const char* abr,
+                         SkPdfFileSpec* data) {return false;}
+
+bool StreamFromDictionary(const PdfMemDocument* pdfDoc,
+                         const PdfDictionary& dict,
+                         const char* key,
+                         const char* abr,
+                         SkPdfStream** data);
+
+bool TreeFromDictionary(const PdfMemDocument* pdfDoc,
+                         const PdfDictionary& dict,
+                         const char* key,
+                         const char* abr,
+                         SkPdfTree** data) {return false;}
+
+bool DateFromDictionary(const PdfMemDocument* pdfDoc,
+                         const PdfDictionary& dict,
+                         const char* key,
+                         const char* abr,
+                         SkPdfDate* data) {return false;}
+
+bool FunctionFromDictionary(const PdfMemDocument* pdfDoc,
+                         const PdfDictionary& dict,
+                         const char* key,
+                         const char* abr,
+                         SkPdfFunction* data) {return false;}
diff --git a/experimental/PdfViewer/SkPdfUtils.h b/experimental/PdfViewer/SkPdfUtils.h
index 970b6c1..858ab8e 100644
--- a/experimental/PdfViewer/SkPdfUtils.h
+++ b/experimental/PdfViewer/SkPdfUtils.h
@@ -39,20 +39,17 @@
                           const char* key,
                           const char* abr,
                           std::string* data);
-
+/*
 class SkPdfDictionary;
 bool DictionaryFromDictionary(const PdfMemDocument* pdfDoc,
                               const PdfDictionary& dict,
                               const char* key,
                               const char* abr,
                               SkPdfDictionary** data);
+*/
 
-template <typename T>
-bool DictionaryFromDictionary2(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        const char* abr,
-                        T** data);
+bool skpdfmap(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfObject** out);
+
 
 class SkPdfObject;
 bool ObjectFromDictionary(const PdfMemDocument* pdfDoc,
@@ -118,9 +115,10 @@
                         const char* abr,
                         SkPdfFunction* data);
 
-bool skpdfmap(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfObject** out);
 SkMatrix SkMatrixFromPdfArray(SkPdfArray* pdfArray);
 
 PdfResult doType3Char(PdfContext* pdfContext, SkCanvas* canvas, SkPdfObject* skobj, SkRect bBox, SkMatrix matrix, double textSize);
 
+#include "SkPdfPodofoMapper_autogen.h"
+
 #endif   // __DEFINED__SkPdfUtils
diff --git a/experimental/PdfViewer/autogen/SkPdfALinkAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfALinkAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..38d8fb8
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfALinkAnnotationDictionary_autogen.cpp
@@ -0,0 +1,51 @@
+#include "SkPdfALinkAnnotationDictionary_autogen.h"
+
+std::string SkPdfALinkAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfALinkAnnotationDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfALinkAnnotationDictionary::getDestAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfALinkAnnotationDictionary::getDestAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfALinkAnnotationDictionary::getDestAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfALinkAnnotationDictionary::H() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "H", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfALinkAnnotationDictionary::PA() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PA", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfALinkAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfALinkAnnotationDictionary_autogen.h
index 920043b..e2ba74e 100644
--- a/experimental/PdfViewer/autogen/SkPdfALinkAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfALinkAnnotationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Optional; PDF 1.4) An alternate representation of the annotation's contents in
  *  human-readable form, useful when extracting the document's contents in sup-
  *  port of accessibility to disabled users or for other purposes (see Section 9.8.2,
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Optional; not permitted if an A entry is present) A destination to be displayed
  *  when the annotation is activated (see Section 8.2.1, "Destinations"; see also
  *  implementation note 66 in Appendix H).
@@ -569,39 +557,21 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getDestAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getDestAsArray() const;
   bool isDestAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getDestAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getDestAsName() const;
   bool isDestAString() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getDestAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getDestAsString() const;
 /** (Optional; PDF 1.2) The annotation's highlighting mode, the visual effect to be
  *  used when the mouse button is pressed or held down inside its active area:
  *      N    (None) No highlighting.
@@ -620,13 +590,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "H", "", NULL));
   }
 
-  std::string H() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "H", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string H() const;
 /** (Optional; PDF 1.3) A URI action (see "URI Actions" on page 523) formerly
  *  associated with this annotation. When Web Capture (Section 9.9, "Web Cap-
  *  ture") changes an annotation from a URI to a go-to action ("Go-To Actions"
@@ -638,13 +602,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PA", "", NULL));
   }
 
-  SkPdfDictionary* PA() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PA", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* PA() const;
 };
 
 #endif  // __DEFINED__SkPdfALinkAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfActionDictionary_autogen.cpp
new file mode 100644
index 0000000..ed91efc
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfActionDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfActionDictionary_autogen.h"
+
+std::string SkPdfActionDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfActionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfActionDictionary::getNextAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Next", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfActionDictionary::getNextAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Next", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfActionDictionary_autogen.h
index b7fa6d0..56f648e 100644
--- a/experimental/PdfViewer/autogen/SkPdfActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfActionDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The type of action that this dictionary describes; see Table 8.34
  *  on page 518 for specific values.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Optional; PDF 1.2) The next action, or sequence of actions, to be per-
  *  formed after this one. The value is either a single action dictionary or an
  *  array of action dictionaries to be performed in order; see below for fur-
@@ -568,26 +556,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getNextAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Next", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getNextAsDictionary() const;
   bool isNextAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Next", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getNextAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Next", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getNextAsArray() const;
 };
 
 #endif  // __DEFINED__SkPdfActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfAlternateImageDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfAlternateImageDictionary_autogen.cpp
new file mode 100644
index 0000000..3d262e4
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfAlternateImageDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfAlternateImageDictionary_autogen.h"
+
+SkPdfStream* SkPdfAlternateImageDictionary::Image() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Image", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+bool SkPdfAlternateImageDictionary::DefaultForPrinting() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DefaultForPrinting", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfAlternateImageDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfAlternateImageDictionary_autogen.h
index 5ab6a9d..4e9b886 100644
--- a/experimental/PdfViewer/autogen/SkPdfAlternateImageDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfAlternateImageDictionary_autogen.h
@@ -531,13 +531,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Image", "", NULL));
   }
 
-  SkPdfStream* Image() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Image", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Image() const;
 /** (Optional) A flag indicating whether this alternate image is the default ver-
  *  sion to be used for printing. At most one alternate for a given base image may
  *  be so designated. If no alternate has this entry set to true, the base image itself
@@ -547,13 +541,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DefaultForPrinting", "", NULL));
   }
 
-  bool DefaultForPrinting() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DefaultForPrinting", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool DefaultForPrinting() const;
 };
 
 #endif  // __DEFINED__SkPdfAlternateImageDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfAnnotationActionsDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfAnnotationActionsDictionary_autogen.cpp
new file mode 100644
index 0000000..183dbd1
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfAnnotationActionsDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfAnnotationActionsDictionary_autogen.h"
+
+SkPdfDictionary* SkPdfAnnotationActionsDictionary::E() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "E", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfAnnotationActionsDictionary::X() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "X", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfAnnotationActionsDictionary::D() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfAnnotationActionsDictionary::U() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "U", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfAnnotationActionsDictionary::Fo() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fo", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfAnnotationActionsDictionary::Bl() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Bl", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfAnnotationActionsDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfAnnotationActionsDictionary_autogen.h
index 01e1ffe..9ded5ee 100644
--- a/experimental/PdfViewer/autogen/SkPdfAnnotationActionsDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfAnnotationActionsDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "E", "", NULL));
   }
 
-  SkPdfDictionary* E() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "E", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* E() const;
 /** (Optional; PDF 1.2) An action to be performed when the cursor exits the annotation's
  *  active area.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "X", "", NULL));
   }
 
-  SkPdfDictionary* X() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "X", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* X() const;
 /** (Optional; PDF 1.2) An action to be performed when the mouse button is pressed
  *  inside the annotation's active area. (The name D stands for "down.")
 **/
@@ -560,13 +548,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", NULL));
   }
 
-  SkPdfDictionary* D() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* D() const;
 /** (Optional; PDF 1.2) An action to be performed when the mouse button is released
  *  inside the annotation's active area. (The name U stands for "up.")
  *  Note: For backward compatibility, the A entry in an annotation dictionary, if present,
@@ -576,13 +558,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "U", "", NULL));
   }
 
-  SkPdfDictionary* U() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "U", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* U() const;
 /** (Optional; PDF 1.2; widget annotations only) An action to be performed when the
  *  annotation receives the input focus.
 **/
@@ -590,13 +566,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fo", "", NULL));
   }
 
-  SkPdfDictionary* Fo() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fo", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Fo() const;
 /** (Optional; PDF 1.2; widget annotations only) (Uppercase B, lowercase L) An action to
  *  be performed when the annotation loses the input focus. (The name Bl stands for
  *  "blurred.")
@@ -605,13 +575,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Bl", "", NULL));
   }
 
-  SkPdfDictionary* Bl() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Bl", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Bl() const;
 };
 
 #endif  // __DEFINED__SkPdfAnnotationActionsDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..0e29966
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfAnnotationDictionary_autogen.cpp
@@ -0,0 +1,135 @@
+#include "SkPdfAnnotationDictionary_autogen.h"
+
+std::string SkPdfAnnotationDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfAnnotationDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfAnnotationDictionary::P() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkRect* SkPdfAnnotationDictionary::Rect() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rect", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDate SkPdfAnnotationDictionary::getMAsDate() const {
+  SkPdfDate ret = SkPdfDate();
+  if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "M", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfDate();
+}
+
+std::string SkPdfAnnotationDictionary::getMAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "M", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfAnnotationDictionary::F() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfDictionary* SkPdfAnnotationDictionary::BS() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfAnnotationDictionary::Border() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Border", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfAnnotationDictionary::AP() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AP", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfAnnotationDictionary::AS() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfAnnotationDictionary::C() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+double SkPdfAnnotationDictionary::CA() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CA", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfAnnotationDictionary::T() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfAnnotationDictionary::Popup() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Popup", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfAnnotationDictionary::A() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfAnnotationDictionary::AA() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfAnnotationDictionary::StructParent() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfAnnotationDictionary_autogen.h
index 5276f64..9b7f08a 100644
--- a/experimental/PdfViewer/autogen/SkPdfAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfAnnotationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The type of annotation that this dictionary describes; see Table
  *  8.14 on page 499 for specific values.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required or optional, depending on the annotation type) Text to be displayed
  *  for the annotation or, if this type of annotation does not display text, an al-
  *  ternate description of the annotation's contents in human-readable form. In
@@ -564,13 +552,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Optional; PDF 1.3; not used in FDF files) An indirect reference to the page
  *  object with which this annotation is associated.
 **/
@@ -578,13 +560,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", NULL));
   }
 
-  SkPdfDictionary* P() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* P() const;
 /** (Required) The annotation rectangle, defining the location of the annotation
  *  on the page in default user space units.
 **/
@@ -592,13 +568,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rect", "", NULL));
   }
 
-  SkRect* Rect() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rect", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* Rect() const;
 /** (Optional; PDF 1.4) The annotation name, a text string uniquely identifying
  *  it among all the annotations on its page.
 **/
@@ -621,26 +591,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfDate getMAsDate() const {
-    SkPdfDate ret = SkPdfDate();
-    if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "M", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfDate();
-  }
-
+  SkPdfDate getMAsDate() const;
   bool isMAString() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "M", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getMAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "M", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getMAsString() const;
 /** (Optional; PDF 1.1) A set of flags specifying various characteristics of the an-
  *  notation (see Section 8.4.2, "Annotation Flags"). Default value: 0.
 **/
@@ -648,13 +606,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  long F() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long F() const;
 /** (Optional; PDF 1.2) A border style dictionary specifying the characteristics of
  *  the annotation's border (see Section 8.4.3, "Border Styles"; see also imple-
  *  mentation note 60 in Appendix H).
@@ -666,13 +618,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BS", "", NULL));
   }
 
-  SkPdfDictionary* BS() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* BS() const;
 /** (Optional) An array specifying the characteristics of the annotation's border.
  *  The border is specified as a "rounded rectangle."
  *  In PDF 1.0, the array consists of three numbers defining the horizontal cor-
@@ -700,13 +646,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Border", "", NULL));
   }
 
-  SkPdfArray* Border() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Border", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Border() const;
 /** (Optional; PDF 1.2) An appearance dictionary specifying how the annotation
  *  is presented visually on the page (see Section 8.4.4, "Appearance Streams";
  *  see also implementation note 60 in Appendix H).
@@ -715,13 +655,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AP", "", NULL));
   }
 
-  SkPdfDictionary* AP() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AP", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* AP() const;
 /** (Required if the appearance dictionary AP contains one or more subdictionaries;
  *  PDF 1.2) The annotation's appearance state, which selects the applicable
  *  appearance stream from an appearance subdictionary (see Section 8.4.4,
@@ -731,13 +665,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AS", "", NULL));
   }
 
-  std::string AS() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string AS() const;
 /** (Optional; PDF 1.1) An array of three numbers in the range 0.0 to 1.0, repre-
  *  senting the components of a color in the DeviceRGB color space. This color
  *  will be used for the following purposes:
@@ -749,13 +677,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", NULL));
   }
 
-  SkPdfArray* C() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* C() const;
 /** (Optional; PDF 1.4) The constant opacity value to be used in painting the
  *  annotation (see Sections 7.1, "Overview of Transparency," and 7.2.6, "Shape
  *  and Opacity Computations"). This value applies to all visible elements of
@@ -777,13 +699,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CA", "", NULL));
   }
 
-  double CA() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CA", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double CA() const;
 /** (Optional; PDF 1.1) The text label to be displayed in the title bar of the anno-
  *  tation's pop-up window when open and active.
 **/
@@ -791,13 +707,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", NULL));
   }
 
-  std::string T() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string T() const;
 /** (Optional; PDF 1.3) An indirect reference to a pop-up annotation for enter-
  *  ing or editing the text associated with this annotation.
 **/
@@ -805,13 +715,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Popup", "", NULL));
   }
 
-  SkPdfDictionary* Popup() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Popup", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Popup() const;
 /** (Optional; PDF 1.1) An action to be performed when the annotation is acti-
  *  vated (see Section 8.5, "Actions").
  *  Note: This entry is not permitted in link annotations if a Dest entry is present
@@ -822,13 +726,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", NULL));
   }
 
-  SkPdfDictionary* A() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* A() const;
 /** (Optional; PDF 1.2) An additional-actions dictionary defining the anno-
  *  tation's behavior in response to various trigger events (see Section 8.5.2,
  *  "Trigger Events"). At the time of publication, this entry is used only by wid-
@@ -838,13 +736,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", NULL));
   }
 
-  SkPdfDictionary* AA() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* AA() const;
 /** (Required if the annotation is a structural content item; PDF 1.3) The integer
  *  key of the annotation's entry in the structural parent tree (see "Finding Struc-
  *  ture Elements from Content Items" on page 600).
@@ -853,13 +745,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParent", "", NULL));
   }
 
-  long StructParent() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long StructParent() const;
 };
 
 #endif  // __DEFINED__SkPdfAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfAppearanceCharacteristicsDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfAppearanceCharacteristicsDictionary_autogen.cpp
new file mode 100644
index 0000000..96b6b4e
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfAppearanceCharacteristicsDictionary_autogen.cpp
@@ -0,0 +1,79 @@
+#include "SkPdfAppearanceCharacteristicsDictionary_autogen.h"
+
+long SkPdfAppearanceCharacteristicsDictionary::R() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfAppearanceCharacteristicsDictionary::BC() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BC", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfAppearanceCharacteristicsDictionary::BG() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BG", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfAppearanceCharacteristicsDictionary::CA() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CA", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfAppearanceCharacteristicsDictionary::RC() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RC", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfAppearanceCharacteristicsDictionary::AC() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AC", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfAppearanceCharacteristicsDictionary::I() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "I", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfAppearanceCharacteristicsDictionary::RI() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RI", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfAppearanceCharacteristicsDictionary::IX() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IX", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfAppearanceCharacteristicsDictionary::IF() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IF", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfAppearanceCharacteristicsDictionary::TP() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TP", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfAppearanceCharacteristicsDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfAppearanceCharacteristicsDictionary_autogen.h
index 75a0038..a3814a6 100644
--- a/experimental/PdfViewer/autogen/SkPdfAppearanceCharacteristicsDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfAppearanceCharacteristicsDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", NULL));
   }
 
-  long R() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long R() const;
 /** (Optional) An array of numbers in the range 0.0 to 1.0 specifying the color of the
  *  widget annotation's border. The number of array elements determines the color
  *  space in which the color is defined:
@@ -552,13 +546,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BC", "", NULL));
   }
 
-  SkPdfArray* BC() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BC", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* BC() const;
 /** (Optional) An array of numbers in the range 0.0 to 1.0 specifying the color of the
  *  widget annotation's background. The number of array elements determines the
  *  color space, as described above for BC.
@@ -567,13 +555,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BG", "", NULL));
   }
 
-  SkPdfArray* BG() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BG", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* BG() const;
 /** (Optional; button fields only) The widget annotation's normal caption, displayed
  *  when it is not interacting with the user.
  *  Note: Unlike the remaining entries listed below, which apply only to widget annota-
@@ -585,13 +567,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CA", "", NULL));
   }
 
-  std::string CA() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CA", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string CA() const;
 /** (Optional; pushbutton fields only) The widget annotation's rollover caption, dis-
  *  played when the user rolls the cursor into its active area without pressing the
  *  mouse button.
@@ -600,13 +576,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RC", "", NULL));
   }
 
-  std::string RC() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RC", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string RC() const;
 /** (Optional; pushbutton fields only) The widget annotation's alternate (down)
  *  caption, displayed when the mouse button is pressed within its active area.
 **/
@@ -614,13 +584,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AC", "", NULL));
   }
 
-  std::string AC() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AC", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string AC() const;
 /** (Optional; pushbutton fields only; must be an indirect reference) A form XObject
  *  defining the widget annotation's normal icon, displayed when it is not inter-
  *  acting with the user.
@@ -629,13 +593,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "I", "", NULL));
   }
 
-  SkPdfStream* I() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "I", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* I() const;
 /** (Optional; pushbutton fields only; must be an indirect reference) A form XObject
  *  defining the widget annotation's rollover icon, displayed when the user rolls the
  *  cursor into its active area without pressing the mouse button.
@@ -644,13 +602,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RI", "", NULL));
   }
 
-  SkPdfStream* RI() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RI", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* RI() const;
 /** (Optional; pushbutton fields only; must be an indirect reference) A form XObject
  *  defining the widget annotation's alternate (down) icon, displayed when the
  *  mouse button is pressed within its active area.
@@ -659,13 +611,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IX", "", NULL));
   }
 
-  SkPdfStream* IX() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IX", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* IX() const;
 /** (Optional; pushbutton fields only) An icon fit dictionary (see Table 8.73 on page
  *  566) specifying how to display the widget annotation's icon within its
  *  annotation rectangle. If present, the icon fit dictionary applies to all of the anno-
@@ -675,13 +621,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IF", "", NULL));
   }
 
-  SkPdfDictionary* IF() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IF", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* IF() const;
 /** (Optional; pushbutton fields only) A code indicating where to position the text of
  *  the widget annotation's caption relative to its icon:
  *      0    No icon; caption only
@@ -697,13 +637,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TP", "", NULL));
   }
 
-  long TP() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TP", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long TP() const;
 };
 
 #endif  // __DEFINED__SkPdfAppearanceCharacteristicsDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfAppearanceDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfAppearanceDictionary_autogen.cpp
new file mode 100644
index 0000000..54ba878
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfAppearanceDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfAppearanceDictionary_autogen.h"
+
+SkPdfStream* SkPdfAppearanceDictionary::getNAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfAppearanceDictionary::getNAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfAppearanceDictionary::getRAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfAppearanceDictionary::getRAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfAppearanceDictionary::getDAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfAppearanceDictionary::getDAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfAppearanceDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfAppearanceDictionary_autogen.h
index 1554916..3e8782b 100644
--- a/experimental/PdfViewer/autogen/SkPdfAppearanceDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfAppearanceDictionary_autogen.h
@@ -537,26 +537,14 @@
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getNAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getNAsStream() const;
   bool isNADictionary() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getNAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getNAsDictionary() const;
 /** (Optional) The annotation's rollover appearance. Default value: the value of
  *  the N entry.
 **/
@@ -570,26 +558,14 @@
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getRAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getRAsStream() const;
   bool isRADictionary() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getRAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getRAsDictionary() const;
 /** (Optional) The annotation's down appearance. Default value: the value of the
  *  N entry.
 **/
@@ -603,26 +579,14 @@
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getDAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getDAsStream() const;
   bool isDADictionary() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getDAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getDAsDictionary() const;
 };
 
 #endif  // __DEFINED__SkPdfAppearanceDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfApplicationDataDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfApplicationDataDictionary_autogen.cpp
new file mode 100644
index 0000000..ff3a3a1
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfApplicationDataDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfApplicationDataDictionary_autogen.h"
+
+SkPdfDate SkPdfApplicationDataDictionary::LastModified() const {
+  SkPdfDate ret;
+  if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastModified", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfDate();
+}
+
+SkPdfObject* SkPdfApplicationDataDictionary::Private() const {
+  SkPdfObject* ret;
+  if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Private", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfApplicationDataDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfApplicationDataDictionary_autogen.h
index 4bf61d8..e82ecc3 100644
--- a/experimental/PdfViewer/autogen/SkPdfApplicationDataDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfApplicationDataDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastModified", "", NULL));
   }
 
-  SkPdfDate LastModified() const {
-    SkPdfDate ret;
-    if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastModified", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfDate();
-  }
-
+  SkPdfDate LastModified() const;
 /** (Optional) Any private data appropriate to the application, typically
  *  in the form of a dictionary.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Private", "", NULL));
   }
 
-  SkPdfObject* Private() const {
-    SkPdfObject* ret;
-    if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Private", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfObject* Private() const;
 };
 
 #endif  // __DEFINED__SkPdfApplicationDataDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfArray_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfArray_autogen.cpp
new file mode 100644
index 0000000..fd25276
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfArray_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfArray_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/SkPdfArtifactsDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfArtifactsDictionary_autogen.cpp
new file mode 100644
index 0000000..bac501d
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfArtifactsDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfArtifactsDictionary_autogen.h"
+
+std::string SkPdfArtifactsDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkRect* SkPdfArtifactsDictionary::BBox() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfArtifactsDictionary::Attached() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Attached", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfArtifactsDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfArtifactsDictionary_autogen.h
index 9cae252..d63a649 100644
--- a/experimental/PdfViewer/autogen/SkPdfArtifactsDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfArtifactsDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Optional) An array of four numbers in default user space units giving the coor-
  *  dinates of the left, bottom, right, and top edges, respectively, of the artifact's
  *  bounding box (the rectangle that completely encloses its visible extent).
@@ -547,13 +541,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BBox", "", NULL));
   }
 
-  SkRect* BBox() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* BBox() const;
 /** (Optional; pagination artifacts only) An array of name objects containing one to
  *  four of the names Top, Bottom, Left, and Right, specifying the edges of the page, if
  *  any, to which the artifact is logically attached. Page edges are defined by the
@@ -565,13 +553,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Attached", "", NULL));
   }
 
-  SkPdfArray* Attached() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Attached", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Attached() const;
 };
 
 #endif  // __DEFINED__SkPdfArtifactsDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfAttributeObjectDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfAttributeObjectDictionary_autogen.cpp
new file mode 100644
index 0000000..7810f46
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfAttributeObjectDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfAttributeObjectDictionary_autogen.h"
+
+std::string SkPdfAttributeObjectDictionary::O() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfAttributeObjectDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfAttributeObjectDictionary_autogen.h
index d389fc4..6c07fa8 100644
--- a/experimental/PdfViewer/autogen/SkPdfAttributeObjectDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfAttributeObjectDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", NULL));
   }
 
-  std::string O() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string O() const;
 };
 
 #endif  // __DEFINED__SkPdfAttributeObjectDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfBeadDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfBeadDictionary_autogen.cpp
new file mode 100644
index 0000000..69c6b07
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfBeadDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfBeadDictionary_autogen.h"
+
+std::string SkPdfBeadDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfBeadDictionary::T() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfBeadDictionary::N() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfBeadDictionary::V() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfBeadDictionary::P() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkRect* SkPdfBeadDictionary::R() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfBeadDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfBeadDictionary_autogen.h
index 4b479c0..24611f7 100644
--- a/experimental/PdfViewer/autogen/SkPdfBeadDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfBeadDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required for the first bead of a thread; optional for all others; must be an indirect refer-
  *  ence) The thread to which this bead belongs.
  *  Note: In PDF 1.1, this entry is permitted only for the first bead of a thread. In PDF 1.2
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", NULL));
   }
 
-  SkPdfDictionary* T() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* T() const;
 /** (Required; must be an indirect reference) The next bead in the thread. In the last bead,
  *  this entry points to the first.
 **/
@@ -562,13 +550,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", NULL));
   }
 
-  SkPdfDictionary* N() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* N() const;
 /** (Required; must be an indirect reference) The previous bead in the thread. In the first
  *  bead, this entry points to the last.
 **/
@@ -576,13 +558,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", NULL));
   }
 
-  SkPdfDictionary* V() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* V() const;
 /** (Required; must be an indirect reference) The page object representing the page on
  *  which this bead appears.
 **/
@@ -590,26 +566,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", NULL));
   }
 
-  SkPdfDictionary* P() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* P() const;
 /** (Required) A rectangle specifying the location of this bead on the page.
 **/
   bool has_R() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", NULL));
   }
 
-  SkRect* R() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* R() const;
 };
 
 #endif  // __DEFINED__SkPdfBeadDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfBlockLevelStructureElementsDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfBlockLevelStructureElementsDictionary_autogen.cpp
new file mode 100644
index 0000000..720eaca
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfBlockLevelStructureElementsDictionary_autogen.cpp
@@ -0,0 +1,93 @@
+#include "SkPdfBlockLevelStructureElementsDictionary_autogen.h"
+
+double SkPdfBlockLevelStructureElementsDictionary::SpaceBefore() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpaceBefore", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfBlockLevelStructureElementsDictionary::SpaceAfter() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpaceAfter", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfBlockLevelStructureElementsDictionary::StartIndent() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StartIndent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfBlockLevelStructureElementsDictionary::EndIndent() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EndIndent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfBlockLevelStructureElementsDictionary::TextIndent() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TextIndent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfBlockLevelStructureElementsDictionary::TextAlign() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TextAlign", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkRect* SkPdfBlockLevelStructureElementsDictionary::BBox() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+double SkPdfBlockLevelStructureElementsDictionary::getWidthAsNumber() const {
+  double ret = 0;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfBlockLevelStructureElementsDictionary::getWidthAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+double SkPdfBlockLevelStructureElementsDictionary::getHeightAsNumber() const {
+  double ret = 0;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfBlockLevelStructureElementsDictionary::getHeightAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfBlockLevelStructureElementsDictionary::BlockAlign() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlockAlign", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfBlockLevelStructureElementsDictionary::InlineAlign() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "InlineAlign", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfBlockLevelStructureElementsDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfBlockLevelStructureElementsDictionary_autogen.h
index 88dd0c7..777911a 100644
--- a/experimental/PdfViewer/autogen/SkPdfBlockLevelStructureElementsDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfBlockLevelStructureElementsDictionary_autogen.h
@@ -538,13 +538,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpaceBefore", "", NULL));
   }
 
-  double SpaceBefore() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpaceBefore", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double SpaceBefore() const;
 /** (Optional) The amount of extra space following the after edge of the BLSE,
  *  measured in default user space units in the block-progression direction. This
  *  value is added to any adjustments induced by the LineHeight attributes of
@@ -558,13 +552,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpaceAfter", "", NULL));
   }
 
-  double SpaceAfter() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpaceAfter", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double SpaceAfter() const;
 /** (Optional) The distance from the start edge of the reference area to that of the
  *  BLSE, measured in default user space units in the inline-progression direc-
  *  tion. This attribute applies only to structure elements with a Placement
@@ -584,13 +572,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StartIndent", "", NULL));
   }
 
-  double StartIndent() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StartIndent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double StartIndent() const;
 /** (Optional) The distance from the end edge of the BLSE to that of the ref-
  *  erence area, measured in default user space units in the inline-progression
  *  direction. This attribute applies only to structure elements with a Placement
@@ -608,13 +590,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EndIndent", "", NULL));
   }
 
-  double EndIndent() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EndIndent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double EndIndent() const;
 /** (Optional; applies only to some BLSEs, as described below) The additional
  *  distance, measured in default user space units in the inline-progression
  *  direction, from the start edge of the BLSE, as specified by StartIndent
@@ -628,13 +604,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TextIndent", "", NULL));
   }
 
-  double TextIndent() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TextIndent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double TextIndent() const;
 /** (Optional; applies only to BLSEs containing text) The alignment, in the inline-
  *  progression direction, of text and other content within lines of the BLSE:
  *  Start        Aligned with the start edge.
@@ -650,13 +620,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TextAlign", "", NULL));
   }
 
-  std::string TextAlign() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TextAlign", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string TextAlign() const;
 /** (Illustrations and tables only; required if the element appears in its entirety on a
  *  single page) An array of four numbers in default user space units giving the
  *  coordinates of the left, bottom, right, and top edges, respectively, of the ele-
@@ -668,13 +632,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BBox", "", NULL));
   }
 
-  SkRect* BBox() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* BBox() const;
 /** (Optional; illustrations, tables, table headers, and table cells only; strongly
  *  recommended for table cells) The desired width of the element's content
  *  rectangle (see "Content and Allocation Rectangles" on page 648), measured
@@ -695,26 +653,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Real || ret->podofo()->GetDataType() == ePdfDataType_Number;
   }
 
-  double getWidthAsNumber() const {
-    double ret = 0;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double getWidthAsNumber() const;
   bool isWidthAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getWidthAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getWidthAsName() const;
 /** (Optional; illustrations, tables, table headers, and table cells only) The desired
  *  height of the element's content rectangle (see "Content and Allocation
  *  Rectangles" on page 648), measured in default user space units in the block-
@@ -734,26 +680,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Real || ret->podofo()->GetDataType() == ePdfDataType_Number;
   }
 
-  double getHeightAsNumber() const {
-    double ret = 0;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double getHeightAsNumber() const;
   bool isHeightAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getHeightAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getHeightAsName() const;
 /** (Optional; table cells only) The alignment, in the block-progression direction,
  *  of content within the table cell:
  *       Before        Before edge of the first child's allocation rectangle aligned
@@ -780,13 +714,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlockAlign", "", NULL));
   }
 
-  std::string BlockAlign() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlockAlign", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string BlockAlign() const;
 /** (Optional; table cells only) The alignment, in the inline-progression direction,
  *  of content within the table cell:
  *     Start         Start edge of each child's allocation rectangle aligned with
@@ -807,13 +735,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "InlineAlign", "", NULL));
   }
 
-  std::string InlineAlign() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "InlineAlign", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string InlineAlign() const;
 };
 
 #endif  // __DEFINED__SkPdfBlockLevelStructureElementsDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfBoolean_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfBoolean_autogen.cpp
new file mode 100644
index 0000000..1528b04
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfBoolean_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfBoolean_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/SkPdfBorderStyleDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfBorderStyleDictionary_autogen.cpp
new file mode 100644
index 0000000..f26588a
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfBorderStyleDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfBorderStyleDictionary_autogen.h"
+
+std::string SkPdfBorderStyleDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+double SkPdfBorderStyleDictionary::W() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "W", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfBorderStyleDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfBorderStyleDictionary::D() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfBorderStyleDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfBorderStyleDictionary_autogen.h
index 5513a0e..e4d66b9 100644
--- a/experimental/PdfViewer/autogen/SkPdfBorderStyleDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfBorderStyleDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Optional) The border width in points. If this value is 0, no border is drawn. Default
  *  value: 1.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "W", "", NULL));
   }
 
-  double W() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "W", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double W() const;
 /** (Optional) The border style:
  *      S    (Solid) A solid rectangle surrounding the annotation.
  *      D    (Dashed) A dashed rectangle surrounding the annotation. The dash pattern
@@ -569,13 +557,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Optional) A dash array defining a pattern of dashes and gaps to be used in drawing a
  *  dashed border (border style D above). The dash array is specified in the same format
  *  as in the line dash pattern parameter of the graphics state (see "Line Dash Pattern" on
@@ -587,13 +569,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", NULL));
   }
 
-  SkPdfArray* D() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* D() const;
 };
 
 #endif  // __DEFINED__SkPdfBorderStyleDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfBoxColorInformationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfBoxColorInformationDictionary_autogen.cpp
new file mode 100644
index 0000000..7ce6524
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfBoxColorInformationDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfBoxColorInformationDictionary_autogen.h"
+
+SkPdfDictionary* SkPdfBoxColorInformationDictionary::CropBox() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CropBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfBoxColorInformationDictionary::BleedBox() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BleedBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfBoxColorInformationDictionary::TrimBox() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TrimBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfBoxColorInformationDictionary::ArtBox() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ArtBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfBoxColorInformationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfBoxColorInformationDictionary_autogen.h
index c50cfea..bd28198 100644
--- a/experimental/PdfViewer/autogen/SkPdfBoxColorInformationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfBoxColorInformationDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CropBox", "", NULL));
   }
 
-  SkPdfDictionary* CropBox() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CropBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* CropBox() const;
 /** (Optional) A box style dictionary (see Table 9.42) specifying the visual characteris-
  *  tics for displaying guidelines for the page's bleed box. This entry is ignored if no
  *  bleed box is defined in the page object.
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BleedBox", "", NULL));
   }
 
-  SkPdfDictionary* BleedBox() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BleedBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* BleedBox() const;
 /** (Optional) A box style dictionary (see Table 9.42) specifying the visual characteris-
  *  tics for displaying guidelines for the page's trim box. This entry is ignored if no trim
  *  box is defined in the page object.
@@ -563,13 +551,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TrimBox", "", NULL));
   }
 
-  SkPdfDictionary* TrimBox() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TrimBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* TrimBox() const;
 /** (Optional) A box style dictionary (see Table 9.42) specifying the visual characteris-
  *  tics for displaying guidelines for the page's art box. This entry is ignored if no art
  *  box is defined in the page object.
@@ -578,13 +560,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ArtBox", "", NULL));
   }
 
-  SkPdfDictionary* ArtBox() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ArtBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* ArtBox() const;
 };
 
 #endif  // __DEFINED__SkPdfBoxColorInformationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfBoxStyleDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfBoxStyleDictionary_autogen.cpp
new file mode 100644
index 0000000..d2dccef
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfBoxStyleDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfBoxStyleDictionary_autogen.h"
+
+SkPdfArray* SkPdfBoxStyleDictionary::C() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+double SkPdfBoxStyleDictionary::W() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "W", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfBoxStyleDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfBoxStyleDictionary::D() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfBoxStyleDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfBoxStyleDictionary_autogen.h
index d68b868..92d2b5a 100644
--- a/experimental/PdfViewer/autogen/SkPdfBoxStyleDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfBoxStyleDictionary_autogen.h
@@ -533,26 +533,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", NULL));
   }
 
-  SkPdfArray* C() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* C() const;
 /** (Optional) The guideline width in default user space units. Default value: 1.
 **/
   bool has_W() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "W", "", NULL));
   }
 
-  double W() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "W", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double W() const;
 /** (Optional) The guideline style:
  *      S    (Solid) A solid rectangle.
  *      D    (Dashed) A dashed rectangle. The dash pattern is specified by the D entry
@@ -563,13 +551,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Optional) A dash array defining a pattern of dashes and gaps to be used in drawing
  *  dashed guidelines (guideline style D above). The dash array is specified in default
  *  user space units, in the same format as in the line dash pattern parameter of the
@@ -581,13 +563,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", NULL));
   }
 
-  SkPdfArray* D() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* D() const;
 };
 
 #endif  // __DEFINED__SkPdfBoxStyleDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfCIDFontDescriptorDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfCIDFontDescriptorDictionary_autogen.cpp
new file mode 100644
index 0000000..56ece28
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfCIDFontDescriptorDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfCIDFontDescriptorDictionary_autogen.h"
+
+SkPdfDictionary* SkPdfCIDFontDescriptorDictionary::Style() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Style", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfCIDFontDescriptorDictionary::Lang() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Lang", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfCIDFontDescriptorDictionary::FD() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FD", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfCIDFontDescriptorDictionary::CIDSet() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDSet", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfCIDFontDescriptorDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfCIDFontDescriptorDictionary_autogen.h
index 4693429..f544eaa 100644
--- a/experimental/PdfViewer/autogen/SkPdfCIDFontDescriptorDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfCIDFontDescriptorDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Style", "", NULL));
   }
 
-  SkPdfDictionary* Style() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Style", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Style() const;
 /** (Optional) A name specifying the language of the font, used for encodings where
  *  the language is not implied by the encoding itself. The possible values are the
  *  2-character language codes defined by ISO 639-for example, en for English and ja
@@ -549,13 +543,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Lang", "", NULL));
   }
 
-  std::string Lang() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Lang", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Lang() const;
 /** (Optional) A dictionary whose keys identify a class of characters in a CIDFont.
  *  Each value is a dictionary containing entries that override the corresponding
  *  values in the main font descriptor dictionary for that class of characters (see "FD,"
@@ -565,13 +553,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FD", "", NULL));
   }
 
-  SkPdfDictionary* FD() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FD", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* FD() const;
 /** (Optional) A stream identifying which CIDs are present in the CIDFont file. If this
  *  entry is present, the CIDFont contains only a subset of the glyphs in the character
  *  collection defined by the CIDSystemInfo dictionary. If it is absent, the only indica-
@@ -585,13 +567,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDSet", "", NULL));
   }
 
-  SkPdfStream* CIDSet() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDSet", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* CIDSet() const;
 };
 
 #endif  // __DEFINED__SkPdfCIDFontDescriptorDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfCIDFontDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfCIDFontDictionary_autogen.cpp
new file mode 100644
index 0000000..069a631
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfCIDFontDictionary_autogen.cpp
@@ -0,0 +1,79 @@
+#include "SkPdfCIDFontDictionary_autogen.h"
+
+std::string SkPdfCIDFontDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfCIDFontDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfCIDFontDictionary::BaseFont() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BaseFont", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfCIDFontDictionary::CIDSystemInfo() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDSystemInfo", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfCIDFontDictionary::FontDescriptor() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontDescriptor", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfCIDFontDictionary::DW() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DW", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfCIDFontDictionary::W() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "W", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfCIDFontDictionary::DW2() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DW2", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfCIDFontDictionary::W2() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "W2", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfCIDFontDictionary::getCIDToGIDMapAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDToGIDMap", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfCIDFontDictionary::getCIDToGIDMapAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDToGIDMap", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfCIDFontDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfCIDFontDictionary_autogen.h
index c213bad..1ebc2ee 100644
--- a/experimental/PdfViewer/autogen/SkPdfCIDFontDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfCIDFontDictionary_autogen.h
@@ -49,26 +49,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The type of CIDFont; CIDFontType0 or CIDFontType2.
 **/
   bool has_Subtype() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required) The PostScript name of the CIDFont. For Type 0 CIDFonts, this
  *  is usually the value of the CIDFontName entry in the CIDFont program. For
  *  Type 2 CIDFonts, it is derived the same way as for a simple TrueType font;
@@ -79,13 +67,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BaseFont", "", NULL));
   }
 
-  std::string BaseFont() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BaseFont", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string BaseFont() const;
 /** (Required) A dictionary containing entries that define the character collec-
  *  tion of the CIDFont. See Table 5.12 on page 337.
 **/
@@ -93,13 +75,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDSystemInfo", "", NULL));
   }
 
-  SkPdfDictionary* CIDSystemInfo() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDSystemInfo", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* CIDSystemInfo() const;
 /** (Required; must be an indirect reference) A font descriptor describing the
  *  CIDFont's default metrics other than its glyph widths (see Section 5.7,
  *  "Font Descriptors").
@@ -108,13 +84,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontDescriptor", "", NULL));
   }
 
-  SkPdfDictionary* FontDescriptor() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontDescriptor", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* FontDescriptor() const;
 /** (Optional) The default width for glyphs in the CIDFont (see "Glyph Met-
  *  rics in CIDFonts" on page 340). Default value: 1000.
 **/
@@ -122,13 +92,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DW", "", NULL));
   }
 
-  long DW() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DW", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long DW() const;
 /** (Optional) A description of the widths for the glyphs in the CIDFont. The
  *  array's elements have a variable format that can specify individual widths
  *  for consecutive CIDs or one width for a range of CIDs (see "Glyph Metrics
@@ -139,13 +103,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "W", "", NULL));
   }
 
-  SkPdfArray* W() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "W", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* W() const;
 /** (Optional; applies only to CIDFonts used for vertical writing) An array of two
  *  numbers specifying the default metrics for vertical writing (see "Glyph
  *  Metrics in CIDFonts" on page 340). Default value: [880 -1000].
@@ -154,13 +112,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DW2", "", NULL));
   }
 
-  SkPdfArray* DW2() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DW2", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* DW2() const;
 /** (Optional; applies only to CIDFonts used for vertical writing) A description of
  *  the metrics for vertical writing for the glyphs in the CIDFont (see "Glyph
  *  Metrics in CIDFonts" on page 340). Default value: none (the DW2 value is
@@ -170,13 +122,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "W2", "", NULL));
   }
 
-  SkPdfArray* W2() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "W2", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* W2() const;
 /** (Optional; Type 2 CIDFonts only) A specification of the mapping from CIDs
  *  to glyph indices. If the value is a stream, the bytes in the stream contain the
  *  mapping from CIDs to glyph indices: the glyph index for a particular CID
@@ -197,26 +143,14 @@
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getCIDToGIDMapAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDToGIDMap", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getCIDToGIDMapAsStream() const;
   bool isCIDToGIDMapAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDToGIDMap", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getCIDToGIDMapAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDToGIDMap", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getCIDToGIDMapAsName() const;
 };
 
 #endif  // __DEFINED__SkPdfCIDFontDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfCIDSystemInfoDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfCIDSystemInfoDictionary_autogen.cpp
new file mode 100644
index 0000000..37223f1
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfCIDSystemInfoDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfCIDSystemInfoDictionary_autogen.h"
+
+std::string SkPdfCIDSystemInfoDictionary::Registry() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Registry", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfCIDSystemInfoDictionary::Ordering() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ordering", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfCIDSystemInfoDictionary::Supplement() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Supplement", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfCIDSystemInfoDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfCIDSystemInfoDictionary_autogen.h
index a23f106..9dfcb72 100644
--- a/experimental/PdfViewer/autogen/SkPdfCIDSystemInfoDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfCIDSystemInfoDictionary_autogen.h
@@ -534,13 +534,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Registry", "", NULL));
   }
 
-  std::string Registry() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Registry", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Registry() const;
 /** (Required) A string that uniquely names the character collection within the speci-
  *  fied registry-for example, Japan1.
 **/
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ordering", "", NULL));
   }
 
-  std::string Ordering() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ordering", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Ordering() const;
 /** (Required) The supplement number of the character collection. An original charac-
  *  ter collection has a supplement number of 0. Whenever additional CIDs are
  *  assigned in a character collection, the supplement number is increased. Supple-
@@ -565,13 +553,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Supplement", "", NULL));
   }
 
-  long Supplement() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Supplement", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Supplement() const;
 };
 
 #endif  // __DEFINED__SkPdfCIDSystemInfoDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfCMapDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfCMapDictionary_autogen.cpp
new file mode 100644
index 0000000..203dca4
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfCMapDictionary_autogen.cpp
@@ -0,0 +1,51 @@
+#include "SkPdfCMapDictionary_autogen.h"
+
+std::string SkPdfCMapDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfCMapDictionary::CMapName() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CMapName", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfCMapDictionary::getCIDSystemInfoAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDSystemInfo", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfCMapDictionary::getCIDSystemInfoAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDSystemInfo", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfCMapDictionary::WMode() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WMode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfCMapDictionary::getUseCMapAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "UseCMap", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfCMapDictionary::getUseCMapAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "UseCMap", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfCMapDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfCMapDictionary_autogen.h
index 98d95f4..4f4538b 100644
--- a/experimental/PdfViewer/autogen/SkPdfCMapDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfCMapDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The PostScript name of the CMap. This should be the same as the
  *  value of CMapName in the CMap file itself.
 **/
@@ -547,13 +541,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CMapName", "", NULL));
   }
 
-  std::string CMapName() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CMapName", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string CMapName() const;
 /** (Required) A dictionary or array containing entries that define the character
  *  collection for the CIDFont or CIDFonts associated with the CMap. If the
  *  CMap selects only font number 0 and specifies character selectors that are
@@ -580,26 +568,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getCIDSystemInfoAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDSystemInfo", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getCIDSystemInfoAsDictionary() const;
   bool isCIDSystemInfoAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDSystemInfo", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getCIDSystemInfoAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CIDSystemInfo", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getCIDSystemInfoAsArray() const;
 /** (Optional) A code that determines the writing mode for any CIDFont with
  *  which this CMap is combined:
  *      0    Horizontal
@@ -612,13 +588,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WMode", "", NULL));
   }
 
-  long WMode() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WMode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long WMode() const;
 /** (Optional) The name of a predefined CMap, or a stream containing a CMap,
  *  that is to be used as the base for this CMap. This allows the CMap to be de-
  *  fined differentially, specifying only the character mappings that differ from
@@ -634,26 +604,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getUseCMapAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "UseCMap", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getUseCMapAsName() const;
   bool isUseCMapAStream() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "UseCMap", "", &ret)) return false;
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getUseCMapAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "UseCMap", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getUseCMapAsStream() const;
 };
 
 #endif  // __DEFINED__SkPdfCMapDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfCalgrayColorSpaceDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfCalgrayColorSpaceDictionary_autogen.cpp
new file mode 100644
index 0000000..72e9cc7
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfCalgrayColorSpaceDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfCalgrayColorSpaceDictionary_autogen.h"
+
+SkPdfArray* SkPdfCalgrayColorSpaceDictionary::WhitePoint() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WhitePoint", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfCalgrayColorSpaceDictionary::BlackPoint() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlackPoint", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+double SkPdfCalgrayColorSpaceDictionary::Gamma() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Gamma", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfCalgrayColorSpaceDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfCalgrayColorSpaceDictionary_autogen.h
index e7b79e1..635ba2e 100644
--- a/experimental/PdfViewer/autogen/SkPdfCalgrayColorSpaceDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfCalgrayColorSpaceDictionary_autogen.h
@@ -534,13 +534,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WhitePoint", "", NULL));
   }
 
-  SkPdfArray* WhitePoint() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WhitePoint", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* WhitePoint() const;
 /** (Optional) An array of three numbers [ XB YB ZB ] specifying the tristimulus
  *  value, in the CIE 1931 XYZ space, of the diffuse black point; see "CalRGB
  *  Color Spaces," below, for further discussion. All three of these numbers must
@@ -550,13 +544,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlackPoint", "", NULL));
   }
 
-  SkPdfArray* BlackPoint() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlackPoint", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* BlackPoint() const;
 /** (Optional) A number G defining the gamma for the gray (A) component. G
  *  must be positive and will generally be greater than or equal to 1. Default
  *  value: 1.
@@ -565,13 +553,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Gamma", "", NULL));
   }
 
-  double Gamma() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Gamma", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double Gamma() const;
 };
 
 #endif  // __DEFINED__SkPdfCalgrayColorSpaceDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfCalrgbColorSpaceDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfCalrgbColorSpaceDictionary_autogen.cpp
new file mode 100644
index 0000000..f2faeaf
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfCalrgbColorSpaceDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfCalrgbColorSpaceDictionary_autogen.h"
+
+SkPdfArray* SkPdfCalrgbColorSpaceDictionary::WhitePoint() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WhitePoint", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfCalrgbColorSpaceDictionary::BlackPoint() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlackPoint", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfCalrgbColorSpaceDictionary::Gamma() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Gamma", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfCalrgbColorSpaceDictionary::Matrix() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matrix", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfCalrgbColorSpaceDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfCalrgbColorSpaceDictionary_autogen.h
index b3b5a3d..500fad6 100644
--- a/experimental/PdfViewer/autogen/SkPdfCalrgbColorSpaceDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfCalrgbColorSpaceDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WhitePoint", "", NULL));
   }
 
-  SkPdfArray* WhitePoint() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WhitePoint", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* WhitePoint() const;
 /** (Optional) An array of three numbers [ XB YB ZB ] specifying the tristimulus value, in
  *  the CIE 1931 XYZ space, of the diffuse black point; see below for further discussion.
  *  All three of these numbers must be nonnegative. Default value: [0.0 0.0 0.0].
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlackPoint", "", NULL));
   }
 
-  SkPdfArray* BlackPoint() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlackPoint", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* BlackPoint() const;
 /** (Optional) An array of three numbers [ GR GG GB ] specifying the gamma for the red,
  *  green, and blue (A, B, and C) components of the color space. Default value:
  *  [1.0 1.0 1.0].
@@ -563,13 +551,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Gamma", "", NULL));
   }
 
-  SkPdfArray* Gamma() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Gamma", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Gamma() const;
 /** (Optional) An array of nine numbers [ XA YA ZA XB YB ZB XC YC ZC ] specifying
  *  the linear interpretation of the decoded A, B, and C components of the color space
  *  with respect to the final XYZ representation. Default value: the identity matrix
@@ -579,13 +561,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matrix", "", NULL));
   }
 
-  SkPdfArray* Matrix() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matrix", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Matrix() const;
 };
 
 #endif  // __DEFINED__SkPdfCalrgbColorSpaceDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfCatalogDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfCatalogDictionary_autogen.cpp
new file mode 100644
index 0000000..bbe7861
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfCatalogDictionary_autogen.cpp
@@ -0,0 +1,163 @@
+#include "SkPdfCatalogDictionary_autogen.h"
+
+std::string SkPdfCatalogDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfCatalogDictionary::Version() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Version", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfCatalogDictionary::Pages() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+double SkPdfCatalogDictionary::getPageLabelsAsNumber() const {
+  double ret = 0;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PageLabels", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfTree* SkPdfCatalogDictionary::getPageLabelsAsTree() const {
+  SkPdfTree* ret = NULL;
+  if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PageLabels", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfCatalogDictionary::Names() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Names", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfCatalogDictionary::Dests() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dests", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfCatalogDictionary::ViewerPreferences() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ViewerPreferences", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfCatalogDictionary::PageLayout() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PageLayout", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfCatalogDictionary::PageMode() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PageMode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfCatalogDictionary::Outlines() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Outlines", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfCatalogDictionary::Threads() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Threads", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfCatalogDictionary::getOpenActionAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OpenAction", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfCatalogDictionary::getOpenActionAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OpenAction", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfCatalogDictionary::AA() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfCatalogDictionary::URI() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URI", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfCatalogDictionary::AcroForm() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AcroForm", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfCatalogDictionary::Metadata() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfCatalogDictionary::StructTreeRoot() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructTreeRoot", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfCatalogDictionary::MarkInfo() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MarkInfo", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfCatalogDictionary::Lang() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Lang", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfCatalogDictionary::SpiderInfo() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpiderInfo", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfCatalogDictionary::OutputIntents() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OutputIntents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfCatalogDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfCatalogDictionary_autogen.h
index 021f118..f98e413 100644
--- a/experimental/PdfViewer/autogen/SkPdfCatalogDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfCatalogDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Optional; PDF 1.4) The version of the PDF specification to which the
  *  document conforms (for example, 1.4), if later than the version specified
  *  in the file's header (see Section 3.4.1, "File Header"). If the header speci-
@@ -555,13 +549,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Version", "", NULL));
   }
 
-  std::string Version() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Version", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Version() const;
 /** (Required; must be an indirect reference) The page tree node that is the
  *  root of the document's page tree (see Section 3.6.2, "Page Tree").
 **/
@@ -569,13 +557,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", NULL));
   }
 
-  SkPdfDictionary* Pages() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Pages() const;
 /** (Optional; PDF 1.3) A number tree (see Section 3.8.5, "Number Trees")
  *  defining the page labeling for the document. The keys in this tree are
  *  page indices; the corresponding values are page label dictionaries (see
@@ -593,26 +575,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Real || ret->podofo()->GetDataType() == ePdfDataType_Number;
   }
 
-  double getPageLabelsAsNumber() const {
-    double ret = 0;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PageLabels", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double getPageLabelsAsNumber() const;
   bool isPageLabelsATree() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PageLabels", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfTree* getPageLabelsAsTree() const {
-    SkPdfTree* ret = NULL;
-    if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PageLabels", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfTree* getPageLabelsAsTree() const;
 /** (Optional; PDF 1.2) The document's name dictionary (see Section 3.6.3,
  *  "Name Dictionary").
 **/
@@ -620,13 +590,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Names", "", NULL));
   }
 
-  SkPdfDictionary* Names() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Names", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Names() const;
 /** (Optional; PDF 1.1; must be an indirect reference) A dictionary of names
  *  and corresponding destinations (see "Named Destinations" on page
  *  476).
@@ -635,13 +599,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dests", "", NULL));
   }
 
-  SkPdfDictionary* Dests() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dests", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Dests() const;
 /** (Optional; PDF 1.2) A viewer preferences dictionary (see Section 8.1,
  *  "Viewer Preferences") specifying the way the document is to be dis-
  *  played on the screen. If this entry is absent, viewer applications should
@@ -651,13 +609,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ViewerPreferences", "", NULL));
   }
 
-  SkPdfDictionary* ViewerPreferences() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ViewerPreferences", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* ViewerPreferences() const;
 /** (Optional) A name object specifying the page layout to be used when the
  *  document is opened:
  *      SinglePage           Display one page at a time.
@@ -672,13 +624,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PageLayout", "", NULL));
   }
 
-  std::string PageLayout() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PageLayout", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string PageLayout() const;
 /** (Optional) A name object specifying how the document should be dis-
  *  played when opened:
  *      UseNone              Neither document outline nor thumbnail im-
@@ -693,13 +639,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PageMode", "", NULL));
   }
 
-  std::string PageMode() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PageMode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string PageMode() const;
 /** (Optional; must be an indirect reference) The outline dictionary that is the
  *  root of the document's outline hierarchy (see Section 8.2.2, "Document
  *  Outline").
@@ -708,13 +648,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Outlines", "", NULL));
   }
 
-  SkPdfDictionary* Outlines() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Outlines", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Outlines() const;
 /** (Optional; PDF 1.1; must be an indirect reference) An array of thread
  *  dictionaries representing the document's article threads (see Section
  *  8.3.2, "Articles").
@@ -723,13 +657,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Threads", "", NULL));
   }
 
-  SkPdfArray* Threads() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Threads", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Threads() const;
 /** (Optional; PDF 1.1) A value specifying a destination to be displayed or
  *  an action to be performed when the document is opened. The value is
  *  either an array defining a destination (see Section 8.2.1, "Destinations")
@@ -747,26 +675,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getOpenActionAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OpenAction", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getOpenActionAsArray() const;
   bool isOpenActionADictionary() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OpenAction", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getOpenActionAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OpenAction", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getOpenActionAsDictionary() const;
 /** (Optional; PDF 1.4) An additional-actions dictionary defining the actions
  *  to be taken in response to various trigger events affecting the document
  *  as a whole (see "Trigger Events" on page 514). (See also implementation
@@ -776,13 +692,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", NULL));
   }
 
-  SkPdfDictionary* AA() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* AA() const;
 /** (Optional) A URI dictionary containing document-level information for
  *  URI (uniform resource identifier) actions (see "URI Actions" on page
  *  523).
@@ -791,13 +701,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URI", "", NULL));
   }
 
-  SkPdfDictionary* URI() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URI", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* URI() const;
 /** (Optional; PDF 1.2) The document's interactive form (AcroForm) dic-
  *  tionary (see Section 8.6.1, "Interactive Form Dictionary").
 **/
@@ -805,13 +709,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AcroForm", "", NULL));
   }
 
-  SkPdfDictionary* AcroForm() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AcroForm", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* AcroForm() const;
 /** (Optional; PDF 1.4; must be an indirect reference) A metadata stream
  *  containing metadata for the document (see Section 9.2.2, "Metadata
  *  Streams").
@@ -820,13 +718,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", NULL));
   }
 
-  SkPdfStream* Metadata() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Metadata() const;
 /** (Optional; PDF 1.3) The document's structure tree root dictionary (see
  *  Section 9.6.1, "Structure Hierarchy").
 **/
@@ -834,13 +726,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructTreeRoot", "", NULL));
   }
 
-  SkPdfDictionary* StructTreeRoot() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructTreeRoot", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* StructTreeRoot() const;
 /** (Optional; PDF 1.4) A mark information dictionary containing informa-
  *  tion about the document's usage of Tagged PDF conventions (see Sec-
  *  tion 9.7.1, "Mark Information Dictionary").
@@ -849,13 +735,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MarkInfo", "", NULL));
   }
 
-  SkPdfDictionary* MarkInfo() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MarkInfo", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* MarkInfo() const;
 /** (Optional; PDF 1.4) A language identifier specifying the natural language
  *  for all text in the document except where overridden by language speci-
  *  fications for structure elements or marked content (see Section 9.8.1,
@@ -866,13 +746,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Lang", "", NULL));
   }
 
-  std::string Lang() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Lang", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Lang() const;
 /** (Optional; PDF 1.3) A Web Capture information dictionary containing
  *  state information used by the Acrobat Web Capture (AcroSpider) plug-
  *  in extension (see Section 9.9.1, "Web Capture Information Dictionary").
@@ -881,13 +755,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpiderInfo", "", NULL));
   }
 
-  SkPdfDictionary* SpiderInfo() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpiderInfo", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* SpiderInfo() const;
 /** (Optional; PDF 1.4) An array of output intent dictionaries describing the
  *  color characteristics of output devices on which the document might be
  *  rendered (see "Output Intents" on page 684).
@@ -896,13 +764,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OutputIntents", "", NULL));
   }
 
-  SkPdfArray* OutputIntents() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OutputIntents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* OutputIntents() const;
 };
 
 #endif  // __DEFINED__SkPdfCatalogDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfCcittfaxdecodeFilterDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfCcittfaxdecodeFilterDictionary_autogen.cpp
new file mode 100644
index 0000000..a7da6c6
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfCcittfaxdecodeFilterDictionary_autogen.cpp
@@ -0,0 +1,58 @@
+#include "SkPdfCcittfaxdecodeFilterDictionary_autogen.h"
+
+long SkPdfCcittfaxdecodeFilterDictionary::K() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+bool SkPdfCcittfaxdecodeFilterDictionary::EndOfLine() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EndOfLine", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+bool SkPdfCcittfaxdecodeFilterDictionary::EncodedByteAlign() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EncodedByteAlign", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+long SkPdfCcittfaxdecodeFilterDictionary::Columns() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Columns", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfCcittfaxdecodeFilterDictionary::Rows() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rows", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+bool SkPdfCcittfaxdecodeFilterDictionary::EndOfBlock() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EndOfBlock", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+bool SkPdfCcittfaxdecodeFilterDictionary::BlackIs1() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlackIs1", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+long SkPdfCcittfaxdecodeFilterDictionary::DamagedRowsBeforeError() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DamagedRowsBeforeError", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfCcittfaxdecodeFilterDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfCcittfaxdecodeFilterDictionary_autogen.h
index d4701fb..a594476 100644
--- a/experimental/PdfViewer/autogen/SkPdfCcittfaxdecodeFilterDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfCcittfaxdecodeFilterDictionary_autogen.h
@@ -539,13 +539,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", NULL));
   }
 
-  long K() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long K() const;
 /** ()A flag indicating whether end-of-line bit patterns are required to be
  *  present in the encoding. The CCITTFaxDecode filter always accepts
  *  end-of-line bit patterns, but requires them only if EndOfLine is true.
@@ -555,13 +549,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EndOfLine", "", NULL));
   }
 
-  bool EndOfLine() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EndOfLine", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool EndOfLine() const;
 /** ()A flag indicating whether the filter expects extra 0 bits before each
  *  encoded line so that the line begins on a byte boundary. If true, the
  *  filter skips over encoded bits to begin decoding each line at a byte
@@ -572,13 +560,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EncodedByteAlign", "", NULL));
   }
 
-  bool EncodedByteAlign() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EncodedByteAlign", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool EncodedByteAlign() const;
 /** ()The width of the image in pixels. If the value is not a multiple of 8,
  *  the filter adjusts the width of the unencoded image to the next mul-
  *  tiple of 8, so that each line starts on a byte boundary. Default value:
@@ -588,13 +570,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Columns", "", NULL));
   }
 
-  long Columns() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Columns", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Columns() const;
 /** ()The height of the image in scan lines. If the value is 0 or absent, the
  *  image's height is not predetermined, and the encoded data must be
  *  terminated by an end-of-block bit pattern or by the end of the fil-
@@ -604,13 +580,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rows", "", NULL));
   }
 
-  long Rows() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rows", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Rows() const;
 /** ()A flag indicating whether the filter expects the encoded data to be
  *  terminated by an end-of-block pattern, overriding the Rows pa-
  *  rameter. If false, the filter stops when it has decoded the number of
@@ -623,13 +593,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EndOfBlock", "", NULL));
   }
 
-  bool EndOfBlock() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EndOfBlock", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool EndOfBlock() const;
 /** ()A flag indicating whether 1 bits are to be interpreted as black pixels
  *  and 0 bits as white pixels, the reverse of the normal PDF convention
  *  for image data. Default value: false.
@@ -638,13 +602,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlackIs1", "", NULL));
   }
 
-  bool BlackIs1() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlackIs1", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool BlackIs1() const;
 /** ()The number of damaged rows of data to be tolerated before an
  *  error occurs. This entry applies only if EndOfLine is true and K is
  *  nonnegative. Tolerating a damaged row means locating its end in
@@ -657,13 +615,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DamagedRowsBeforeError", "", NULL));
   }
 
-  long DamagedRowsBeforeError() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DamagedRowsBeforeError", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long DamagedRowsBeforeError() const;
 };
 
 #endif  // __DEFINED__SkPdfCcittfaxdecodeFilterDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfCheckboxFieldDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfCheckboxFieldDictionary_autogen.cpp
new file mode 100644
index 0000000..947fdf4
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfCheckboxFieldDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfCheckboxFieldDictionary_autogen.h"
+
+std::string SkPdfCheckboxFieldDictionary::Opt() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Opt", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfCheckboxFieldDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfCheckboxFieldDictionary_autogen.h
index 9661ed9..1509c97 100644
--- a/experimental/PdfViewer/autogen/SkPdfCheckboxFieldDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfCheckboxFieldDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Opt", "", NULL));
   }
 
-  std::string Opt() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Opt", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Opt() const;
 };
 
 #endif  // __DEFINED__SkPdfCheckboxFieldDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfChoiceFieldDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfChoiceFieldDictionary_autogen.cpp
new file mode 100644
index 0000000..39ba54c
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfChoiceFieldDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfChoiceFieldDictionary_autogen.h"
+
+SkPdfArray* SkPdfChoiceFieldDictionary::Opt() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Opt", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfChoiceFieldDictionary::TI() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TI", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfChoiceFieldDictionary::I() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "I", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfChoiceFieldDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfChoiceFieldDictionary_autogen.h
index 6aec3e8..17d74ba 100644
--- a/experimental/PdfViewer/autogen/SkPdfChoiceFieldDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfChoiceFieldDictionary_autogen.h
@@ -535,13 +535,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Opt", "", NULL));
   }
 
-  SkPdfArray* Opt() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Opt", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Opt() const;
 /** (Optional; inheritable) For scrollable list boxes, the top index (the index in the Opt array
  *  of the first option visible in the list).
 **/
@@ -549,13 +543,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TI", "", NULL));
   }
 
-  long TI() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TI", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long TI() const;
 /** (Sometimes required, otherwise optional; inheritable; PDF 1.4) For choice fields that allow
  *  multiple selection (MultiSelect flag set), an array of integers, sorted in ascending order,
  *  representing the zero-based indices in the Opt array of the currently selected option
@@ -568,13 +556,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "I", "", NULL));
   }
 
-  SkPdfArray* I() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "I", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* I() const;
 };
 
 #endif  // __DEFINED__SkPdfChoiceFieldDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfComponentsWithMetadataDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfComponentsWithMetadataDictionary_autogen.cpp
new file mode 100644
index 0000000..80b5cf3
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfComponentsWithMetadataDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfComponentsWithMetadataDictionary_autogen.h"
+
+SkPdfStream* SkPdfComponentsWithMetadataDictionary::Metadata() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfComponentsWithMetadataDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfComponentsWithMetadataDictionary_autogen.h
index 401b090..7d77ce7 100644
--- a/experimental/PdfViewer/autogen/SkPdfComponentsWithMetadataDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfComponentsWithMetadataDictionary_autogen.h
@@ -531,13 +531,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", NULL));
   }
 
-  SkPdfStream* Metadata() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Metadata() const;
 };
 
 #endif  // __DEFINED__SkPdfComponentsWithMetadataDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfDctdecodeFilterDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfDctdecodeFilterDictionary_autogen.cpp
new file mode 100644
index 0000000..66ff159
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfDctdecodeFilterDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfDctdecodeFilterDictionary_autogen.h"
+
+long SkPdfDctdecodeFilterDictionary::ColorTransform() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorTransform", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfDctdecodeFilterDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfDctdecodeFilterDictionary_autogen.h
index 7d13d01..71f1a83 100644
--- a/experimental/PdfViewer/autogen/SkPdfDctdecodeFilterDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfDctdecodeFilterDictionary_autogen.h
@@ -548,13 +548,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorTransform", "", NULL));
   }
 
-  long ColorTransform() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorTransform", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long ColorTransform() const;
 };
 
 #endif  // __DEFINED__SkPdfDctdecodeFilterDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfDeviceNColorSpaceDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfDeviceNColorSpaceDictionary_autogen.cpp
new file mode 100644
index 0000000..c41bc24
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfDeviceNColorSpaceDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfDeviceNColorSpaceDictionary_autogen.h"
+
+SkPdfDictionary* SkPdfDeviceNColorSpaceDictionary::Colorants() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Colorants", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfDeviceNColorSpaceDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfDeviceNColorSpaceDictionary_autogen.h
index ec96dbc..b1bd765 100644
--- a/experimental/PdfViewer/autogen/SkPdfDeviceNColorSpaceDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfDeviceNColorSpaceDictionary_autogen.h
@@ -542,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Colorants", "", NULL));
   }
 
-  SkPdfDictionary* Colorants() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Colorants", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Colorants() const;
 };
 
 #endif  // __DEFINED__SkPdfDeviceNColorSpaceDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfDictionary_autogen.cpp
new file mode 100644
index 0000000..ca56507
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfDictionary_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfDictionary_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/SkPdfDocumentCatalogActionsDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfDocumentCatalogActionsDictionary_autogen.cpp
new file mode 100644
index 0000000..78df9e3
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfDocumentCatalogActionsDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfDocumentCatalogActionsDictionary_autogen.h"
+
+SkPdfDictionary* SkPdfDocumentCatalogActionsDictionary::DC() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DC", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfDocumentCatalogActionsDictionary::WS() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfDocumentCatalogActionsDictionary::DS() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfDocumentCatalogActionsDictionary::WP() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WP", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfDocumentCatalogActionsDictionary::DP() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DP", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfDocumentCatalogActionsDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfDocumentCatalogActionsDictionary_autogen.h
index 515825a..201792f 100644
--- a/experimental/PdfViewer/autogen/SkPdfDocumentCatalogActionsDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfDocumentCatalogActionsDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DC", "", NULL));
   }
 
-  SkPdfDictionary* DC() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DC", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* DC() const;
 /** (Optional; PDF 1.4) A JavaScript action to be performed before saving a document.
  *  (The name WS stands for "will save.")
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WS", "", NULL));
   }
 
-  SkPdfDictionary* WS() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* WS() const;
 /** (Optional; PDF 1.4) A JavaScript action to be performed after saving a document. (The
  *  name DS stands for "did save.")
 **/
@@ -560,13 +548,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DS", "", NULL));
   }
 
-  SkPdfDictionary* DS() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* DS() const;
 /** (Optional; PDF 1.4) A JavaScript action to be performed before printing a document.
  *  (The name WP stands for "will print.")
 **/
@@ -574,13 +556,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WP", "", NULL));
   }
 
-  SkPdfDictionary* WP() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WP", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* WP() const;
 /** (Optional; PDF 1.4) A JavaScript action to be performed after printing a document.
  *  (The name DP stands for "did print.")
 **/
@@ -588,13 +564,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DP", "", NULL));
   }
 
-  SkPdfDictionary* DP() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DP", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* DP() const;
 };
 
 #endif  // __DEFINED__SkPdfDocumentCatalogActionsDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfDocumentInformationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfDocumentInformationDictionary_autogen.cpp
new file mode 100644
index 0000000..1b0cb1c
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfDocumentInformationDictionary_autogen.cpp
@@ -0,0 +1,65 @@
+#include "SkPdfDocumentInformationDictionary_autogen.h"
+
+std::string SkPdfDocumentInformationDictionary::Title() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Title", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfDocumentInformationDictionary::Author() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Author", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfDocumentInformationDictionary::Subject() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subject", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfDocumentInformationDictionary::Keywords() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Keywords", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfDocumentInformationDictionary::Creator() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Creator", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfDocumentInformationDictionary::Producer() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Producer", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDate SkPdfDocumentInformationDictionary::CreationDate() const {
+  SkPdfDate ret;
+  if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CreationDate", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfDate();
+}
+
+SkPdfDate SkPdfDocumentInformationDictionary::ModDate() const {
+  SkPdfDate ret;
+  if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ModDate", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfDate();
+}
+
+std::string SkPdfDocumentInformationDictionary::Trapped() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Trapped", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfDocumentInformationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfDocumentInformationDictionary_autogen.h
index 34e88fa..e4e80e0 100644
--- a/experimental/PdfViewer/autogen/SkPdfDocumentInformationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfDocumentInformationDictionary_autogen.h
@@ -531,52 +531,28 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Title", "", NULL));
   }
 
-  std::string Title() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Title", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Title() const;
 /** (Optional) The name of the person who created the document.
 **/
   bool has_Author() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Author", "", NULL));
   }
 
-  std::string Author() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Author", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Author() const;
 /** (Optional; PDF 1.1) The subject of the document.
 **/
   bool has_Subject() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subject", "", NULL));
   }
 
-  std::string Subject() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subject", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subject() const;
 /** (Optional; PDF 1.1) Keywords associated with the document.
 **/
   bool has_Keywords() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Keywords", "", NULL));
   }
 
-  std::string Keywords() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Keywords", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Keywords() const;
 /** (Optional) If the document was converted to PDF from another format, the
  *  name of the application (for example, Adobe FrameMaker(R)) that created the
  *  original document from which it was converted.
@@ -585,13 +561,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Creator", "", NULL));
   }
 
-  std::string Creator() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Creator", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Creator() const;
 /** (Optional) If the document was converted to PDF from another format, the
  *  name of the application (for example, Acrobat Distiller) that converted it to
  *  PDF.
@@ -600,13 +570,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Producer", "", NULL));
   }
 
-  std::string Producer() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Producer", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Producer() const;
 /** (Optional) The date and time the document was created, in human-readable
  *  form (see Section 3.8.2, "Dates").
 **/
@@ -614,13 +578,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CreationDate", "", NULL));
   }
 
-  SkPdfDate CreationDate() const {
-    SkPdfDate ret;
-    if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CreationDate", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfDate();
-  }
-
+  SkPdfDate CreationDate() const;
 /** (Optional; PDF 1.1) The date and time the document was most recently
  *  modified, in human-readable form (see Section 3.8.2, "Dates").
 **/
@@ -628,13 +586,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ModDate", "", NULL));
   }
 
-  SkPdfDate ModDate() const {
-    SkPdfDate ret;
-    if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ModDate", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfDate();
-  }
-
+  SkPdfDate ModDate() const;
 /** (Optional; PDF 1.3) A name object indicating whether the document has
  *  been modified to include trapping information (see Section 9.10.5, "Trap-
  *  ping Support"):
@@ -656,13 +608,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Trapped", "", NULL));
   }
 
-  std::string Trapped() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Trapped", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Trapped() const;
 };
 
 #endif  // __DEFINED__SkPdfDocumentInformationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfEmbeddedFileParameterDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfEmbeddedFileParameterDictionary_autogen.cpp
new file mode 100644
index 0000000..86e0a2b
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfEmbeddedFileParameterDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfEmbeddedFileParameterDictionary_autogen.h"
+
+long SkPdfEmbeddedFileParameterDictionary::Size() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Size", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfDate SkPdfEmbeddedFileParameterDictionary::CreationDate() const {
+  SkPdfDate ret;
+  if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CreationDate", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfDate();
+}
+
+SkPdfDate SkPdfEmbeddedFileParameterDictionary::ModDate() const {
+  SkPdfDate ret;
+  if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ModDate", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfDate();
+}
+
+SkPdfDictionary* SkPdfEmbeddedFileParameterDictionary::Mac() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mac", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfEmbeddedFileParameterDictionary::CheckSum() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CheckSum", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfEmbeddedFileParameterDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfEmbeddedFileParameterDictionary_autogen.h
index fedb722..7248bfb 100644
--- a/experimental/PdfViewer/autogen/SkPdfEmbeddedFileParameterDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfEmbeddedFileParameterDictionary_autogen.h
@@ -531,39 +531,21 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Size", "", NULL));
   }
 
-  long Size() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Size", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Size() const;
 /** (Optional) The date and time when the embedded file was created.
 **/
   bool has_CreationDate() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CreationDate", "", NULL));
   }
 
-  SkPdfDate CreationDate() const {
-    SkPdfDate ret;
-    if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CreationDate", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfDate();
-  }
-
+  SkPdfDate CreationDate() const;
 /** (Optional) The date and time when the embedded file was last modified.
 **/
   bool has_ModDate() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ModDate", "", NULL));
   }
 
-  SkPdfDate ModDate() const {
-    SkPdfDate ret;
-    if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ModDate", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfDate();
-  }
-
+  SkPdfDate ModDate() const;
 /** (Optional) A subdictionary containing additional information specific to
  *  Mac OS files (see Table 3.35).
 **/
@@ -571,13 +553,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mac", "", NULL));
   }
 
-  SkPdfDictionary* Mac() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mac", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Mac() const;
 /** (Optional) A 16-byte string that is the checksum of the bytes of the uncom-
  *  pressed embedded file. The checksum is calculated by applying the standard
  *  MD5 message-digest algorithm (described in Internet RFC 1321, The MD5
@@ -588,13 +564,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CheckSum", "", NULL));
   }
 
-  std::string CheckSum() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CheckSum", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string CheckSum() const;
 };
 
 #endif  // __DEFINED__SkPdfEmbeddedFileParameterDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfEmbeddedFileStreamDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfEmbeddedFileStreamDictionary_autogen.cpp
new file mode 100644
index 0000000..1f3367f
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfEmbeddedFileStreamDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfEmbeddedFileStreamDictionary_autogen.h"
+
+std::string SkPdfEmbeddedFileStreamDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfEmbeddedFileStreamDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfEmbeddedFileStreamDictionary::Params() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Params", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfEmbeddedFileStreamDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfEmbeddedFileStreamDictionary_autogen.h
index 96479fc..cd43e74 100644
--- a/experimental/PdfViewer/autogen/SkPdfEmbeddedFileStreamDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfEmbeddedFileStreamDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Optional) The subtype of the embedded file. The value of this entry must be
  *  a first-class name, as defined in Appendix E. Names without a registered pre-
  *  fix must conform to the MIME media type names defined in Internet RFC
@@ -551,13 +545,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Optional) An embedded file parameter dictionary containing additional, file-
  *  specific information (see Table 3.34).
 **/
@@ -565,13 +553,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Params", "", NULL));
   }
 
-  SkPdfDictionary* Params() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Params", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Params() const;
 };
 
 #endif  // __DEFINED__SkPdfEmbeddedFileStreamDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfEmbeddedFontStreamDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfEmbeddedFontStreamDictionary_autogen.cpp
new file mode 100644
index 0000000..8b01a5d
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfEmbeddedFontStreamDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfEmbeddedFontStreamDictionary_autogen.h"
+
+long SkPdfEmbeddedFontStreamDictionary::Length1() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length1", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfEmbeddedFontStreamDictionary::Length2() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length2", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfEmbeddedFontStreamDictionary::Length3() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length3", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfEmbeddedFontStreamDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfEmbeddedFontStreamDictionary::Metadata() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfEmbeddedFontStreamDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfEmbeddedFontStreamDictionary_autogen.h
index 1c55026..25e12d8 100644
--- a/experimental/PdfViewer/autogen/SkPdfEmbeddedFontStreamDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfEmbeddedFontStreamDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length1", "", NULL));
   }
 
-  long Length1() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length1", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Length1() const;
 /** (Required for Type 1 fonts) The length in bytes of the encrypted portion of the Type 1
  *  font program (see below) after it has been decoded using the filters specified by the
  *  stream's Filter entry.
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length2", "", NULL));
   }
 
-  long Length2() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length2", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Length2() const;
 /** (Required for Type 1 fonts) The length in bytes of the fixed-content portion of the
  *  Type 1 font program (see below), after it has been decoded using the filters specified
  *  by the stream's Filter entry. If Length3 is 0, it indicates that the 512 zeros and clearto-
@@ -564,13 +552,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length3", "", NULL));
   }
 
-  long Length3() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length3", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Length3() const;
 /** (Required if referenced from FontFile3; PDF 1.2) A name specifying the format of the
  *  embedded font program. The name must be Type1C for Type 1 compact fonts or CID-
  *  FontType0C for Type 0 compact CIDFonts. When additional font formats are added
@@ -580,13 +562,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Optional; PDF 1.4) A metadata stream containing metadata for the embedded font
  *  program (see Section 9.2.2, "Metadata Streams").
 **/
@@ -594,13 +570,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", NULL));
   }
 
-  SkPdfStream* Metadata() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Metadata() const;
 };
 
 #endif  // __DEFINED__SkPdfEmbeddedFontStreamDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfEncodingDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfEncodingDictionary_autogen.cpp
new file mode 100644
index 0000000..c305d3b
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfEncodingDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfEncodingDictionary_autogen.h"
+
+std::string SkPdfEncodingDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfEncodingDictionary::BaseEncoding() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BaseEncoding", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfEncodingDictionary::Differences() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Differences", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfEncodingDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfEncodingDictionary_autogen.h
index 293bba4..6ec291b 100644
--- a/experimental/PdfViewer/autogen/SkPdfEncodingDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfEncodingDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Optional) The base encoding-that is, the encoding from which the Differences
  *  entry (if present) describes differences-specified as the name of a predefined
  *  encoding MacRomanEncoding, MacExpertEncoding, or WinAnsiEncoding (see
@@ -554,13 +548,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BaseEncoding", "", NULL));
   }
 
-  std::string BaseEncoding() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BaseEncoding", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string BaseEncoding() const;
 /** (Optional; not recommended with TrueType fonts) An array describing the differ-
  *  ences from the encoding specified by BaseEncoding or, if BaseEncoding is ab-
  *  sent, from an implicit base encoding. The Differences array is described above.
@@ -583,13 +571,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Differences", "", NULL));
   }
 
-  SkPdfArray* Differences() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Differences", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Differences() const;
 };
 
 #endif  // __DEFINED__SkPdfEncodingDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfEncryptedEmbeddedFileStreamDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfEncryptedEmbeddedFileStreamDictionary_autogen.cpp
new file mode 100644
index 0000000..3126cf0
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfEncryptedEmbeddedFileStreamDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfEncryptedEmbeddedFileStreamDictionary_autogen.h"
+
+long SkPdfEncryptedEmbeddedFileStreamDictionary::EncryptionRevision() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EncryptionRevision", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfEncryptedEmbeddedFileStreamDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfEncryptedEmbeddedFileStreamDictionary_autogen.h
index 77be6d7..2cad87b 100644
--- a/experimental/PdfViewer/autogen/SkPdfEncryptedEmbeddedFileStreamDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfEncryptedEmbeddedFileStreamDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EncryptionRevision", "", NULL));
   }
 
-  long EncryptionRevision() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EncryptionRevision", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long EncryptionRevision() const;
 };
 
 #endif  // __DEFINED__SkPdfEncryptedEmbeddedFileStreamDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfEncryptionCommonDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfEncryptionCommonDictionary_autogen.cpp
new file mode 100644
index 0000000..a38f329
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfEncryptionCommonDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfEncryptionCommonDictionary_autogen.h"
+
+std::string SkPdfEncryptionCommonDictionary::Filter() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Filter", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+double SkPdfEncryptionCommonDictionary::V() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfEncryptionCommonDictionary::Length() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfEncryptionCommonDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfEncryptionCommonDictionary_autogen.h
index 5470b9b..4716986 100644
--- a/experimental/PdfViewer/autogen/SkPdfEncryptionCommonDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfEncryptionCommonDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Filter", "", NULL));
   }
 
-  std::string Filter() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Filter", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Filter() const;
 /** (Optional but strongly recommended) A code specifying the algorithm to be used in en-
  *  crypting and decrypting the document:
  *     0     An algorithm that is undocumented and no longer supported, and whose use is
@@ -557,13 +551,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", NULL));
   }
 
-  double V() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double V() const;
 /** (Optional; PDF 1.4; only if V is 2 or 3) The length of the encryption key, in bits. The value
  *  must be a multiple of 8, in the range 40 to 128. Default value: 40.
 **/
@@ -571,13 +559,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length", "", NULL));
   }
 
-  long Length() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Length() const;
 };
 
 #endif  // __DEFINED__SkPdfEncryptionCommonDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFCatalogDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFDFCatalogDictionary_autogen.cpp
new file mode 100644
index 0000000..e57079e
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFDFCatalogDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfFDFCatalogDictionary_autogen.h"
+
+std::string SkPdfFDFCatalogDictionary::Version() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Version", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfFDFCatalogDictionary::FDF() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FDF", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFCatalogDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFDFCatalogDictionary_autogen.h
index baddd5f..77f066f 100644
--- a/experimental/PdfViewer/autogen/SkPdfFDFCatalogDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFDFCatalogDictionary_autogen.h
@@ -538,26 +538,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Version", "", NULL));
   }
 
-  std::string Version() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Version", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Version() const;
 /** (Required) The FDF dictionary for this file (see Table 8.69).
 **/
   bool has_FDF() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FDF", "", NULL));
   }
 
-  SkPdfDictionary* FDF() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FDF", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* FDF() const;
 };
 
 #endif  // __DEFINED__SkPdfFDFCatalogDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFDFDictionary_autogen.cpp
new file mode 100644
index 0000000..0f749e1
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFDFDictionary_autogen.cpp
@@ -0,0 +1,79 @@
+#include "SkPdfFDFDictionary_autogen.h"
+
+SkPdfFileSpec SkPdfFDFDictionary::F() const {
+  SkPdfFileSpec ret;
+  if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFileSpec();
+}
+
+SkPdfArray* SkPdfFDFDictionary::ID() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfFDFDictionary::Fields() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfFDFDictionary::Status() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Status", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfFDFDictionary::Pages() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfFDFDictionary::Encoding() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfFDFDictionary::Annots() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Annots", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfFDFDictionary::Differences() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Differences", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfFDFDictionary::Target() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Target", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfFDFDictionary::EmbeddedFDFs() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EmbeddedFDFs", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfFDFDictionary::JavaScript() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JavaScript", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFDFDictionary_autogen.h
index af7fc69..cd73ba9 100644
--- a/experimental/PdfViewer/autogen/SkPdfFDFDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFDFDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  SkPdfFileSpec F() const {
-    SkPdfFileSpec ret;
-    if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFileSpec();
-  }
-
+  SkPdfFileSpec F() const;
 /** (Optional) An array of two strings constituting a file identifier (see
  *  Section 9.3, "File Identifiers") for the source or target file designated
  *  by F, taken from the ID entry in the file's trailer dictionary (see Sec-
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", NULL));
   }
 
-  SkPdfArray* ID() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* ID() const;
 /** (Optional) An array of FDF field dictionaries (see "FDF Fields" on
  *  page 564) describing the root fields (those with no ancestors in
  *  the field hierarchy) to be exported or imported. This entry and
@@ -564,13 +552,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", NULL));
   }
 
-  SkPdfArray* Fields() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Fields() const;
 /** (Optional) A status string to be displayed indicating the result of an
  *  action, typically a submit-form action (see "Submit-Form Actions"
  *  on page 550). The string is encoded with PDFDocEncoding. (See
@@ -581,13 +563,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Status", "", NULL));
   }
 
-  std::string Status() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Status", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Status() const;
 /** (Optional; PDF 1.3) An array of FDF page dictionaries (see "FDF
  *  Pages" on page 566) describing new pages to be added to a PDF
  *  target document. The Fields and Status entries may not be present
@@ -597,13 +573,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", NULL));
   }
 
-  SkPdfArray* Pages() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Pages() const;
 /** (Optional; PDF 1.3) The encoding to be used for any FDF field
  *  value or option (V or Opt in the field dictionary; see Table 8.72 on
  *  page 564) that is a string and does not begin with the Unicode pre-
@@ -614,13 +584,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", NULL));
   }
 
-  std::string Encoding() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Encoding() const;
 /** (Optional; PDF 1.3) An array of FDF annotation dictionaries (see
  *  "FDF Annotation Dictionaries" on page 568). The array can in-
  *  clude annotations of any of the standard types listed in Table 8.14
@@ -630,13 +594,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Annots", "", NULL));
   }
 
-  SkPdfArray* Annots() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Annots", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Annots() const;
 /** (Optional; PDF 1.4) A stream containing all the bytes in all incre-
  *  mental updates made to the underlying PDF document since it was
  *  opened (see Section 3.4.5, "Incremental Updates"). If a submit-
@@ -660,13 +618,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Differences", "", NULL));
   }
 
-  SkPdfStream* Differences() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Differences", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Differences() const;
 /** (Optional; PDF 1.4) The name of a browser frame in which the un-
  *  derlying PDF document is to be opened. This mimics the behavior
  *  of the target attribute in HTML <href> tags.
@@ -675,13 +627,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Target", "", NULL));
   }
 
-  std::string Target() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Target", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Target() const;
 /** (Optional; PDF 1.4) An array of file specifications (see Section 3.10,
  *  "File Specifications") representing other FDF files embedded with-
  *  in this one (Section 3.10.3, "Embedded File Streams").
@@ -690,13 +636,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EmbeddedFDFs", "", NULL));
   }
 
-  SkPdfArray* EmbeddedFDFs() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EmbeddedFDFs", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* EmbeddedFDFs() const;
 /** (Optional; PDF 1.4) A JavaScript dictionary (see Table 8.71) defin-
  *  ing document-level JavaScript scripts.
 **/
@@ -704,13 +644,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JavaScript", "", NULL));
   }
 
-  SkPdfDictionary* JavaScript() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JavaScript", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* JavaScript() const;
 };
 
 #endif  // __DEFINED__SkPdfFDFDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFFieldDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFDFFieldDictionary_autogen.cpp
new file mode 100644
index 0000000..a16545f
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFDFFieldDictionary_autogen.cpp
@@ -0,0 +1,107 @@
+#include "SkPdfFDFFieldDictionary_autogen.h"
+
+SkPdfArray* SkPdfFDFFieldDictionary::Kids() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfFDFFieldDictionary::T() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfObject* SkPdfFDFFieldDictionary::V() const {
+  SkPdfObject* ret;
+  if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfFDFFieldDictionary::Ff() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ff", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfFDFFieldDictionary::SetFf() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SetFf", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfFDFFieldDictionary::ClrFf() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ClrFf", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfFDFFieldDictionary::F() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfFDFFieldDictionary::SetF() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SetF", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfFDFFieldDictionary::ClrF() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ClrF", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfDictionary* SkPdfFDFFieldDictionary::AP() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AP", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfFDFFieldDictionary::APRef() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "APRef", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfFDFFieldDictionary::IF() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IF", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfFDFFieldDictionary::Opt() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Opt", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfFDFFieldDictionary::A() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfFDFFieldDictionary::AA() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFFieldDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFDFFieldDictionary_autogen.h
index 9ece7a9..bcdf0c5 100644
--- a/experimental/PdfViewer/autogen/SkPdfFDFFieldDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFDFFieldDictionary_autogen.h
@@ -533,26 +533,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", NULL));
   }
 
-  SkPdfArray* Kids() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Kids() const;
 /** (Required) The partial field name (see "Field Names" on page 532).
 **/
   bool has_T() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", NULL));
   }
 
-  std::string T() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string T() const;
 /** (Optional) The field's value, whose format varies depending on the field type; see
  *  the descriptions of individual field types in Section 8.6.3 for further information.
 **/
@@ -560,13 +548,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", NULL));
   }
 
-  SkPdfObject* V() const {
-    SkPdfObject* ret;
-    if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfObject* V() const;
 /** (Optional) A set of flags specifying various characteristics of the field (see Tables
  *  8.50 on page 532, 8.53 on page 538, 8.56 on page 543, and 8.58 on page 546). When
  *  imported into an interactive form, the value of this entry replaces that of the Ff
@@ -577,13 +559,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ff", "", NULL));
   }
 
-  long Ff() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ff", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Ff() const;
 /** (Optional) A set of flags to be set (turned on) in the Ff entry of the form's cor-
  *  responding field dictionary. Bits equal to 1 in SetFf cause the corresponding bits in
  *  Ff to be set to 1. This entry is ignored if an Ff entry is present in the FDF field
@@ -593,13 +569,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SetFf", "", NULL));
   }
 
-  long SetFf() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SetFf", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long SetFf() const;
 /** (Optional) A set of flags to be cleared (turned off) in the Ff entry of the form's cor-
  *  responding field dictionary. Bits equal to 1 in ClrFf cause the corresponding bits in
  *  Ff to be set to 0. If a SetFf entry is also present in the FDF field dictionary, it is
@@ -610,13 +580,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ClrFf", "", NULL));
   }
 
-  long ClrFf() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ClrFf", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long ClrFf() const;
 /** (Optional) A set of flags specifying various characteristics of the field's widget anno-
  *  tation (see Section 8.4.2, "Annotation Flags"). When imported into an interactive
  *  form, the value of this entry replaces that of the F entry in the form's corresponding
@@ -627,13 +591,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  long F() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long F() const;
 /** (Optional) A set of flags to be set (turned on) in the F entry of the form's corre-
  *  sponding widget annotation dictionary. Bits equal to 1 in SetF cause the corre-
  *  sponding bits in F to be set to 1. This entry is ignored if an F entry is present in the
@@ -643,13 +601,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SetF", "", NULL));
   }
 
-  long SetF() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SetF", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long SetF() const;
 /** (Optional) A set of flags to be cleared (turned off) in the F entry of the form's corre-
  *  sponding widget annotation dictionary. Bits equal to 1 in ClrF cause the corre-
  *  sponding bits in F to be set to 0. If a SetF entry is also present in the FDF field
@@ -660,13 +612,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ClrF", "", NULL));
   }
 
-  long ClrF() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ClrF", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long ClrF() const;
 /** (Optional) An appearance dictionary specifying the appearance of a pushbutton
  *  field (see "Pushbuttons" on page 539). The appearance dictionary's contents are as
  *  shown in Table 8.13 on page 497, except that the values of the N, R, and D entries
@@ -676,13 +622,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AP", "", NULL));
   }
 
-  SkPdfDictionary* AP() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AP", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* AP() const;
 /** (Optional; PDF 1.3) A dictionary holding references to external PDF files contain-
  *  ing the pages to use for the appearances of a pushbutton field. This dictionary is
  *  similar to an appearance dictionary (see Table 8.13 on page 497), except that the
@@ -693,13 +633,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "APRef", "", NULL));
   }
 
-  SkPdfDictionary* APRef() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "APRef", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* APRef() const;
 /** (Optional; PDF 1.3; button fields only) An icon fit dictionary (see Table 8.73) speci-
  *  fying how to display a button field's icon within the annotation rectangle of its wid-
  *  get annotation.
@@ -708,13 +642,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IF", "", NULL));
   }
 
-  SkPdfDictionary* IF() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IF", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* IF() const;
 /** (Required; choice fields only) An array of options to be presented to the user. Each
  *  element of the array can take either of two forms:
  *  *  A text string representing one of the available options
@@ -726,13 +654,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Opt", "", NULL));
   }
 
-  SkPdfArray* Opt() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Opt", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Opt() const;
 /** (Optional) An action to be performed when this field's widget annotation is activat-
  *  ed (see Section 8.5, "Actions").
 **/
@@ -740,13 +662,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", NULL));
   }
 
-  SkPdfDictionary* A() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* A() const;
 /** (Optional) An additional-actions dictionary defining the field's behavior in re-
  *  sponse to various trigger events (see Section 8.5.2, "Trigger Events").
 **/
@@ -754,13 +670,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", NULL));
   }
 
-  SkPdfDictionary* AA() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* AA() const;
 };
 
 #endif  // __DEFINED__SkPdfFDFFieldDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFFileAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFDFFileAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..f34d1d6
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFDFFileAnnotationDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfFDFFileAnnotationDictionary_autogen.h"
+
+long SkPdfFDFFileAnnotationDictionary::Page() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Page", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFFileAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFDFFileAnnotationDictionary_autogen.h
index 1e5b26a..dab235e 100644
--- a/experimental/PdfViewer/autogen/SkPdfFDFFileAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFDFFileAnnotationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Page", "", NULL));
   }
 
-  long Page() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Page", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Page() const;
 };
 
 #endif  // __DEFINED__SkPdfFDFFileAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFNamedPageReferenceDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFDFNamedPageReferenceDictionary_autogen.cpp
new file mode 100644
index 0000000..9fdda2d
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFDFNamedPageReferenceDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfFDFNamedPageReferenceDictionary_autogen.h"
+
+std::string SkPdfFDFNamedPageReferenceDictionary::Name() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfFileSpec SkPdfFDFNamedPageReferenceDictionary::F() const {
+  SkPdfFileSpec ret;
+  if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFileSpec();
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFNamedPageReferenceDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFDFNamedPageReferenceDictionary_autogen.h
index 41b765f..6cdbe93 100644
--- a/experimental/PdfViewer/autogen/SkPdfFDFNamedPageReferenceDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFDFNamedPageReferenceDictionary_autogen.h
@@ -531,13 +531,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", NULL));
   }
 
-  std::string Name() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Name() const;
 /** (Optional) The file containing the named page. If this key is absent, it is
  *  assumed that the page resides in the associated PDF file.
 **/
@@ -545,13 +539,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  SkPdfFileSpec F() const {
-    SkPdfFileSpec ret;
-    if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFileSpec();
-  }
-
+  SkPdfFileSpec F() const;
 };
 
 #endif  // __DEFINED__SkPdfFDFNamedPageReferenceDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFPageDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFDFPageDictionary_autogen.cpp
new file mode 100644
index 0000000..6e25ecb
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFDFPageDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfFDFPageDictionary_autogen.h"
+
+SkPdfArray* SkPdfFDFPageDictionary::Templates() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Templates", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfFDFPageDictionary::Info() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Info", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFPageDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFDFPageDictionary_autogen.h
index 509bd7b..32d1719 100644
--- a/experimental/PdfViewer/autogen/SkPdfFDFPageDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFDFPageDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Templates", "", NULL));
   }
 
-  SkPdfArray* Templates() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Templates", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Templates() const;
 /** (Optional) An FDF page information dictionary containing additional informa-
  *  tion about the page. At the time of publication, no entries have been defined for
  *  this dictionary.
@@ -547,13 +541,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Info", "", NULL));
   }
 
-  SkPdfDictionary* Info() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Info", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Info() const;
 };
 
 #endif  // __DEFINED__SkPdfFDFPageDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFTemplateDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFDFTemplateDictionary_autogen.cpp
new file mode 100644
index 0000000..9aa27b7
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFDFTemplateDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfFDFTemplateDictionary_autogen.h"
+
+SkPdfDictionary* SkPdfFDFTemplateDictionary::TRef() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TRef", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfFDFTemplateDictionary::Fields() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+bool SkPdfFDFTemplateDictionary::Rename() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rename", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFTemplateDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFDFTemplateDictionary_autogen.h
index 92bfa1a..3123a93 100644
--- a/experimental/PdfViewer/autogen/SkPdfFDFTemplateDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFDFTemplateDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TRef", "", NULL));
   }
 
-  SkPdfDictionary* TRef() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TRef", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* TRef() const;
 /** (Optional) An array of references to FDF field dictionaries (see Table 8.72 on
  *  page 564) describing the root fields to be imported (those with no ancestors in
  *  the field hierarchy).
@@ -547,13 +541,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", NULL));
   }
 
-  SkPdfArray* Fields() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Fields() const;
 /** (Optional) A flag specifying whether fields imported from the template may be
  *  renamed in the event of name conflicts with existing fields; see below for further
  *  discussion. Default value: true.
@@ -562,13 +550,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rename", "", NULL));
   }
 
-  bool Rename() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rename", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool Rename() const;
 };
 
 #endif  // __DEFINED__SkPdfFDFTemplateDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFTrailerDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFDFTrailerDictionary_autogen.cpp
new file mode 100644
index 0000000..f376306
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFDFTrailerDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfFDFTrailerDictionary_autogen.h"
+
+SkPdfDictionary* SkPdfFDFTrailerDictionary::Root() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Root", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFDFTrailerDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFDFTrailerDictionary_autogen.h
index 12ac84c..ca381e0 100644
--- a/experimental/PdfViewer/autogen/SkPdfFDFTrailerDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFDFTrailerDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Root", "", NULL));
   }
 
-  SkPdfDictionary* Root() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Root", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Root() const;
 };
 
 #endif  // __DEFINED__SkPdfFDFTrailerDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFieldDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFieldDictionary_autogen.cpp
new file mode 100644
index 0000000..94f3a21
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFieldDictionary_autogen.cpp
@@ -0,0 +1,72 @@
+#include "SkPdfFieldDictionary_autogen.h"
+
+std::string SkPdfFieldDictionary::FT() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FT", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfFieldDictionary::Parent() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfFieldDictionary::Kids() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfFieldDictionary::T() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfFieldDictionary::TU() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TU", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfFieldDictionary::TM() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TM", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfFieldDictionary::Ff() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ff", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfObject* SkPdfFieldDictionary::V() const {
+  SkPdfObject* ret;
+  if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfObject* SkPdfFieldDictionary::DV() const {
+  SkPdfObject* ret;
+  if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DV", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfFieldDictionary::AA() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFieldDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFieldDictionary_autogen.h
index 6a67ff4..8333eba 100644
--- a/experimental/PdfViewer/autogen/SkPdfFieldDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFieldDictionary_autogen.h
@@ -541,13 +541,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FT", "", NULL));
   }
 
-  std::string FT() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FT", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string FT() const;
 /** (Required if this field is the child of another in the field hierarchy; absent other-
  *  wise) The field that is the immediate parent of this one (the field, if any,
  *  whose Kids array includes this field). A field can have at most one parent; that
@@ -557,13 +551,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", NULL));
   }
 
-  SkPdfDictionary* Parent() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Parent() const;
 /** (Optional) An array of indirect references to the immediate children of this
  *  field.
 **/
@@ -571,13 +559,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", NULL));
   }
 
-  SkPdfArray* Kids() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Kids() const;
 /** (Optional) The partial field name (see "Field Names," below; see also imple-
  *  mentation notes 82 and 83 in Appendix H).
 **/
@@ -585,13 +567,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", NULL));
   }
 
-  std::string T() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string T() const;
 /** (Optional; PDF 1.3) An alternate field name, to be used in place of the actual
  *  field name wherever the field must be identified in the user interface (such as
  *  in error or status messages referring to the field). This text is also useful
@@ -603,13 +579,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TU", "", NULL));
   }
 
-  std::string TU() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TU", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string TU() const;
 /** (Optional; PDF 1.3) The mapping name to be used when exporting inter-
  *  active form field data from the document.
 **/
@@ -617,13 +587,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TM", "", NULL));
   }
 
-  std::string TM() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TM", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string TM() const;
 /** (Optional; inheritable) A set of flags specifying various characteristics of the
  *  field (see Table 8.50). Default value: 0.
 **/
@@ -631,13 +595,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ff", "", NULL));
   }
 
-  long Ff() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ff", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Ff() const;
 /** (Optional; inheritable) The field's value, whose format varies depending on
  *  the field type; see the descriptions of individual field types for further infor-
  *  mation.
@@ -646,13 +604,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", NULL));
   }
 
-  SkPdfObject* V() const {
-    SkPdfObject* ret;
-    if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfObject* V() const;
 /** (Optional; inheritable) The default value to which the field reverts when a
  *  reset-form action is executed (see "Reset-Form Actions" on page 554). The
  *  format of this value is the same as that of V.
@@ -661,13 +613,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DV", "", NULL));
   }
 
-  SkPdfObject* DV() const {
-    SkPdfObject* ret;
-    if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DV", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfObject* DV() const;
 /** (Optional; PDF 1.2) An additional-actions dictionary defining the field's
  *  behavior in response to various trigger events (see Section 8.5.2, "Trigger
  *  Events"). This entry has exactly the same meaning as the AA entry in an
@@ -677,13 +623,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", NULL));
   }
 
-  SkPdfDictionary* AA() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* AA() const;
 };
 
 #endif  // __DEFINED__SkPdfFieldDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFileAttachmentAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFileAttachmentAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..fed0cf6
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFileAttachmentAnnotationDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfFileAttachmentAnnotationDictionary_autogen.h"
+
+std::string SkPdfFileAttachmentAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfFileSpec SkPdfFileAttachmentAnnotationDictionary::FS() const {
+  SkPdfFileSpec ret;
+  if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFileSpec();
+}
+
+std::string SkPdfFileAttachmentAnnotationDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfFileAttachmentAnnotationDictionary::Name() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFileAttachmentAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFileAttachmentAnnotationDictionary_autogen.h
index 2187f76..99b60af 100644
--- a/experimental/PdfViewer/autogen/SkPdfFileAttachmentAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFileAttachmentAnnotationDictionary_autogen.h
@@ -532,26 +532,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required) The file associated with this annotation.
 **/
   bool has_FS() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FS", "", NULL));
   }
 
-  SkPdfFileSpec FS() const {
-    SkPdfFileSpec ret;
-    if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFileSpec();
-  }
-
+  SkPdfFileSpec FS() const;
 /** (Required) The text to be displayed in the pop-up window when the annota-
  *  tion is opened. Carriage returns may be used to separate the text into para-
  *  graphs.
@@ -560,13 +548,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Optional) The name of an icon to be used in displaying the annotation.
  *  Viewer applications should provide predefined icon appearances for at least
  *  the following standard names:
@@ -581,13 +563,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", NULL));
   }
 
-  std::string Name() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Name() const;
 };
 
 #endif  // __DEFINED__SkPdfFileAttachmentAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFileSpecificationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFileSpecificationDictionary_autogen.cpp
new file mode 100644
index 0000000..e87539e
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFileSpecificationDictionary_autogen.cpp
@@ -0,0 +1,72 @@
+#include "SkPdfFileSpecificationDictionary_autogen.h"
+
+std::string SkPdfFileSpecificationDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfFileSpecificationDictionary::FS() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfFileSpecificationDictionary::F() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfFileSpecificationDictionary::DOS() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DOS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfFileSpecificationDictionary::Mac() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mac", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfFileSpecificationDictionary::Unix() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Unix", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfFileSpecificationDictionary::ID() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+bool SkPdfFileSpecificationDictionary::V() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+SkPdfDictionary* SkPdfFileSpecificationDictionary::EF() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EF", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfFileSpecificationDictionary::RF() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RF", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFileSpecificationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFileSpecificationDictionary_autogen.h
index d233724..494b0d6 100644
--- a/experimental/PdfViewer/autogen/SkPdfFileSpecificationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFileSpecificationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Optional) The name of the file system to be used to interpret this file specification. If
  *  this entry is present, all other entries in the dictionary are interpreted by the desig-
  *  nated file system. PDF defines only one standard file system, URL (see Section 3.10.4,
@@ -550,13 +544,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FS", "", NULL));
   }
 
-  std::string FS() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string FS() const;
 /** (Required if the DOS, Mac, and Unix entries are all absent) A file specification string of
  *  the form described in Section 3.10.1, "File Specification Strings," or (if the file system
  *  is URL) a uniform resource locator, as described in Section 3.10.4, "URL Specifica-
@@ -566,13 +554,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  std::string F() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string F() const;
 /** (Optional) A file specification string (see Section 3.10.1, "File Specification Strings")
  *  representing a DOS file name.
 **/
@@ -580,13 +562,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DOS", "", NULL));
   }
 
-  std::string DOS() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DOS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string DOS() const;
 /** (Optional) A file specification string (see Section 3.10.1, "File Specification Strings")
  *  representing a Mac OS file name.
 **/
@@ -594,13 +570,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mac", "", NULL));
   }
 
-  std::string Mac() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mac", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Mac() const;
 /** (Optional) A file specification string (see Section 3.10.1, "File Specification Strings")
  *  representing a UNIX file name.
 **/
@@ -608,13 +578,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Unix", "", NULL));
   }
 
-  std::string Unix() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Unix", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Unix() const;
 /** (Optional) An array of two strings constituting a file identifier (see Section 9.3, "File
  *  Identifiers") that is also included in the referenced file. The use of this entry improves
  *  a viewer application's chances of finding the intended file and allows it to warn the
@@ -624,13 +588,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", NULL));
   }
 
-  SkPdfArray* ID() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* ID() const;
 /** (Optional; PDF 1.2) A flag indicating whether the file referenced by the file specifica-
  *  tion is volatile (changes frequently with time). If the value is true, viewer applications
  *  should never cache a copy of the file. For example, a movie annotation referencing a
@@ -641,13 +599,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", NULL));
   }
 
-  bool V() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool V() const;
 /** (Required if RF is present; PDF 1.3) A dictionary containing a subset of the keys F,
  *  DOS, Mac, and Unix, corresponding to the entries by those names in the file specifica-
  *  tion dictionary. The value of each such key is an embedded file stream (see Section
@@ -659,13 +611,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EF", "", NULL));
   }
 
-  SkPdfDictionary* EF() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EF", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* EF() const;
 /** (Optional; PDF 1.3) A dictionary with the same structure as the EF dictionary, which
  *  must also be present. Each key in the RF dictionary must also be present in the EF dic-
  *  tionary. Each value is a related files array (see "Related Files Arrays" on page 125)
@@ -677,13 +623,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RF", "", NULL));
   }
 
-  SkPdfDictionary* RF() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RF", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* RF() const;
 };
 
 #endif  // __DEFINED__SkPdfFileSpecificationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFileTrailerDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFileTrailerDictionary_autogen.cpp
new file mode 100644
index 0000000..7b82356
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFileTrailerDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfFileTrailerDictionary_autogen.h"
+
+long SkPdfFileTrailerDictionary::Size() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Size", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfFileTrailerDictionary::Prev() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Prev", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfDictionary* SkPdfFileTrailerDictionary::Root() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Root", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfFileTrailerDictionary::Encrypt() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encrypt", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfFileTrailerDictionary::Info() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Info", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfFileTrailerDictionary::ID() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFileTrailerDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFileTrailerDictionary_autogen.h
index 4978695..2cec231 100644
--- a/experimental/PdfViewer/autogen/SkPdfFileTrailerDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFileTrailerDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Size", "", NULL));
   }
 
-  long Size() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Size", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Size() const;
 /** (Present only if the file has more than one cross-reference section) The byte offset from
  *  the beginning of the file to the beginning of the previous cross-reference section.
 **/
@@ -547,13 +541,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Prev", "", NULL));
   }
 
-  long Prev() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Prev", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Prev() const;
 /** (Required; must be an indirect reference) The catalog dictionary for the PDF docu-
  *  ment contained in the file (see Section 3.6.1, "Document Catalog").
 **/
@@ -561,13 +549,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Root", "", NULL));
   }
 
-  SkPdfDictionary* Root() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Root", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Root() const;
 /** (Required if document is encrypted; PDF 1.1) The document's encryption dictionary
  *  (see Section 3.5, "Encryption").
 **/
@@ -575,13 +557,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encrypt", "", NULL));
   }
 
-  SkPdfDictionary* Encrypt() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encrypt", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Encrypt() const;
 /** (Optional; must be an indirect reference) The document's information dictionary
  *  (see Section 9.2.1, "Document Information Dictionary").
 **/
@@ -589,13 +565,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Info", "", NULL));
   }
 
-  SkPdfDictionary* Info() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Info", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Info() const;
 /** (Optional; PDF 1.1) An array of two strings constituting a file identifier (see Section
  *  9.3, "File Identifiers") for the file.
 **/
@@ -603,13 +573,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", NULL));
   }
 
-  SkPdfArray* ID() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* ID() const;
 };
 
 #endif  // __DEFINED__SkPdfFileTrailerDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFontDescriptorDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFontDescriptorDictionary_autogen.cpp
new file mode 100644
index 0000000..58a2a47
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFontDescriptorDictionary_autogen.cpp
@@ -0,0 +1,135 @@
+#include "SkPdfFontDescriptorDictionary_autogen.h"
+
+std::string SkPdfFontDescriptorDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfFontDescriptorDictionary::FontName() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontName", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfFontDescriptorDictionary::Flags() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Flags", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkRect* SkPdfFontDescriptorDictionary::FontBBox() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontBBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+double SkPdfFontDescriptorDictionary::ItalicAngle() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ItalicAngle", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfFontDescriptorDictionary::Ascent() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ascent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfFontDescriptorDictionary::Descent() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Descent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfFontDescriptorDictionary::Leading() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Leading", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfFontDescriptorDictionary::CapHeight() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CapHeight", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfFontDescriptorDictionary::XHeight() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "XHeight", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfFontDescriptorDictionary::StemV() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StemV", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfFontDescriptorDictionary::StemH() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StemH", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfFontDescriptorDictionary::AvgWidth() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AvgWidth", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfFontDescriptorDictionary::MaxWidth() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MaxWidth", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfFontDescriptorDictionary::MissingWidth() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MissingWidth", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfStream* SkPdfFontDescriptorDictionary::FontFile() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontFile", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfFontDescriptorDictionary::FontFile2() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontFile2", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfFontDescriptorDictionary::FontFile3() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontFile3", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfFontDescriptorDictionary::CharSet() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CharSet", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFontDescriptorDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFontDescriptorDictionary_autogen.h
index 2d57f71..724c8fa 100644
--- a/experimental/PdfViewer/autogen/SkPdfFontDescriptorDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFontDescriptorDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The PostScript name of the font. This should be the same as the
  *  value of BaseFont in the font or CIDFont dictionary that refers to this font
  *  descriptor.
@@ -547,13 +541,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontName", "", NULL));
   }
 
-  std::string FontName() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontName", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string FontName() const;
 /** (Required) A collection of flags defining various characteristics of the font
  *  (see Section 5.7.1, "Font Descriptor Flags").
 **/
@@ -561,13 +549,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Flags", "", NULL));
   }
 
-  long Flags() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Flags", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Flags() const;
 /** (Required) A rectangle (see Section 3.8.3, "Rectangles"), expressed in the
  *  glyph coordinate system, specifying the font bounding box. This is the small-
  *  est rectangle enclosing the shape that would result if all of the glyphs of the
@@ -577,13 +559,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontBBox", "", NULL));
   }
 
-  SkRect* FontBBox() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontBBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* FontBBox() const;
 /** (Required) The angle, expressed in degrees counterclockwise from the verti-
  *  cal, of the dominant vertical strokes of the font. (For example, the 9-o'clock
  *  position is 90 degrees, and the 3-o'clock position is '90 degrees.) The value is
@@ -593,13 +569,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ItalicAngle", "", NULL));
   }
 
-  double ItalicAngle() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ItalicAngle", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double ItalicAngle() const;
 /** (Required) The maximum height above the baseline reached by glyphs in this
  *  font, excluding the height of glyphs for accented characters.
 **/
@@ -607,13 +577,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ascent", "", NULL));
   }
 
-  double Ascent() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ascent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double Ascent() const;
 /** (Required) The maximum depth below the baseline reached by glyphs in this
  *  font. The value is a negative number.
 **/
@@ -621,13 +585,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Descent", "", NULL));
   }
 
-  double Descent() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Descent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double Descent() const;
 /** (Optional) The desired spacing between baselines of consecutive lines of text.
  *  Default value: 0.
 **/
@@ -635,13 +593,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Leading", "", NULL));
   }
 
-  double Leading() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Leading", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double Leading() const;
 /** (Required) The vertical coordinate of the top of flat capital letters, measured
  *  from the baseline.
 **/
@@ -649,13 +601,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CapHeight", "", NULL));
   }
 
-  double CapHeight() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CapHeight", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double CapHeight() const;
 /** (Optional) The font's x height: the vertical coordinate of the top of flat non-
  *  ascending lowercase letters (like the letter x), measured from the baseline.
  *  Default value: 0.
@@ -664,13 +610,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "XHeight", "", NULL));
   }
 
-  double XHeight() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "XHeight", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double XHeight() const;
 /** (Required) The thickness, measured horizontally, of the dominant vertical
  *  stems of glyphs in the font.
 **/
@@ -678,13 +618,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StemV", "", NULL));
   }
 
-  double StemV() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StemV", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double StemV() const;
 /** (Optional) The thickness, measured invertically, of the dominant horizontal
  *  stems of glyphs in the font. Default value: 0.
 **/
@@ -692,39 +626,21 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StemH", "", NULL));
   }
 
-  double StemH() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StemH", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double StemH() const;
 /** (Optional) The average width of glyphs in the font. Default value: 0.
 **/
   bool has_AvgWidth() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AvgWidth", "", NULL));
   }
 
-  double AvgWidth() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AvgWidth", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double AvgWidth() const;
 /** (Optional) The maximum width of glyphs in the font. Default value: 0.
 **/
   bool has_MaxWidth() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MaxWidth", "", NULL));
   }
 
-  double MaxWidth() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MaxWidth", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double MaxWidth() const;
 /** (Optional) The width to use for character codes whose widths are not speci-
  *  fied in a font dictionary's Widths array. This has a predictable effect only if all
  *  such codes map to glyphs whose actual widths are the same as the Missing-
@@ -734,13 +650,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MissingWidth", "", NULL));
   }
 
-  double MissingWidth() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MissingWidth", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double MissingWidth() const;
 /** (Optional) A stream containing a Type 1 font program (see Section 5.8,
  *  "Embedded Font Programs").
 **/
@@ -748,13 +658,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontFile", "", NULL));
   }
 
-  SkPdfStream* FontFile() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontFile", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* FontFile() const;
 /** (Optional; PDF 1.1) A stream containing a TrueType font program (see Sec-
  *  tion 5.8, "Embedded Font Programs").
 **/
@@ -762,13 +666,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontFile2", "", NULL));
   }
 
-  SkPdfStream* FontFile2() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontFile2", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* FontFile2() const;
 /** (Optional; PDF 1.2) A stream containing a font program other than Type 1 or
  *  TrueType. The format of the font program is specified by the Subtype entry
  *  in the stream dictionary (see Section 5.8, "Embedded Font Programs," and
@@ -780,13 +678,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontFile3", "", NULL));
   }
 
-  SkPdfStream* FontFile3() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontFile3", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* FontFile3() const;
 /** (Optional; meaningful only in Type 1 fonts; PDF 1.1) A string listing the char-
  *  acter names defined in a font subset. The names in this string must be in PDF
  *  syntax-that is, each name preceded by a slash (/). The names can appear in
@@ -798,13 +690,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CharSet", "", NULL));
   }
 
-  std::string CharSet() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CharSet", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string CharSet() const;
 };
 
 #endif  // __DEFINED__SkPdfFontDescriptorDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFontDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFontDictionary_autogen.cpp
new file mode 100644
index 0000000..759cbf5
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFontDictionary_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfFontDictionary_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFormFieldActionsDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFormFieldActionsDictionary_autogen.cpp
new file mode 100644
index 0000000..7a5eb41
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFormFieldActionsDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfFormFieldActionsDictionary_autogen.h"
+
+SkPdfDictionary* SkPdfFormFieldActionsDictionary::K() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfFormFieldActionsDictionary::F() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfFormFieldActionsDictionary::V() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfFormFieldActionsDictionary::C() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFormFieldActionsDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFormFieldActionsDictionary_autogen.h
index 2792bf1..0b7573f 100644
--- a/experimental/PdfViewer/autogen/SkPdfFormFieldActionsDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFormFieldActionsDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", NULL));
   }
 
-  SkPdfDictionary* K() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* K() const;
 /** (Optional; PDF 1.3) A JavaScript action to be performed before the field is formatted
  *  to display its current value. This allows the field's value to be modified before format-
  *  ting.
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  SkPdfDictionary* F() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* F() const;
 /** (Optional; PDF 1.3) A JavaScript action to be performed when the field's value is
  *  changed. This allows the new value to be checked for validity. (The name V stands for
  *  "validate.")
@@ -563,13 +551,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", NULL));
   }
 
-  SkPdfDictionary* V() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* V() const;
 /** (Optional; PDF 1.3) A JavaScript action to be performed in order to recalculate the
  *  value of this field when that of another field changes. (The name C stands for
  *  "calculate.") The order in which the document's fields are recalculated is defined by the
@@ -580,13 +562,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", NULL));
   }
 
-  SkPdfDictionary* C() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* C() const;
 };
 
 #endif  // __DEFINED__SkPdfFormFieldActionsDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFreeTextAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFreeTextAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..0a1929f
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFreeTextAnnotationDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfFreeTextAnnotationDictionary_autogen.h"
+
+std::string SkPdfFreeTextAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfFreeTextAnnotationDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfFreeTextAnnotationDictionary::DA() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DA", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfFreeTextAnnotationDictionary::Q() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Q", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFreeTextAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFreeTextAnnotationDictionary_autogen.h
index 795e9bf..ebbf92e 100644
--- a/experimental/PdfViewer/autogen/SkPdfFreeTextAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFreeTextAnnotationDictionary_autogen.h
@@ -532,26 +532,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required) The text to be displayed.
 **/
   bool has_Contents() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Required) The default appearance string to be used in formatting the text (see
  *  "Variable Text" on page 533).
  *  Note: The annotation dictionary's AP entry, if present, takes precedence over the DA
@@ -561,13 +549,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DA", "", NULL));
   }
 
-  std::string DA() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DA", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string DA() const;
 /** (Optional; PDF 1.4) A code specifying the form of quadding (justification) to be
  *  used in displaying the annotation's text:
  *     0     Left-justified
@@ -579,13 +561,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Q", "", NULL));
   }
 
-  long Q() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Q", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Q() const;
 };
 
 #endif  // __DEFINED__SkPdfFreeTextAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfFunctionCommonDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfFunctionCommonDictionary_autogen.cpp
new file mode 100644
index 0000000..ac63bae
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfFunctionCommonDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfFunctionCommonDictionary_autogen.h"
+
+long SkPdfFunctionCommonDictionary::FunctionType() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FunctionType", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfFunctionCommonDictionary::Domain() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Domain", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfFunctionCommonDictionary::Range() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Range", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfFunctionCommonDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfFunctionCommonDictionary_autogen.h
index 5633dcb..f308a0c 100644
--- a/experimental/PdfViewer/autogen/SkPdfFunctionCommonDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfFunctionCommonDictionary_autogen.h
@@ -535,13 +535,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FunctionType", "", NULL));
   }
 
-  long FunctionType() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FunctionType", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long FunctionType() const;
 /** (Required) An array of 2 x m numbers, where m is the number of input
  *  values. For each i from 0 to m - 1, Domain2i must be less than or equal to
  *  Domain2i+1 , and the ith input value, xi , must lie in the interval
@@ -552,13 +546,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Domain", "", NULL));
   }
 
-  SkPdfArray* Domain() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Domain", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Domain() const;
 /** (Required for type 0 and type 4 functions, optional otherwise; see below) An
  *  array of 2 x n numbers, where n is the number of output values. For each j
  *  from 0 to n - 1, Range2j must be less than or equal to Range2j+1 , and the jth
@@ -570,13 +558,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Range", "", NULL));
   }
 
-  SkPdfArray* Range() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Range", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Range() const;
 };
 
 #endif  // __DEFINED__SkPdfFunctionCommonDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfGoToActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfGoToActionDictionary_autogen.cpp
new file mode 100644
index 0000000..2b3fbc3
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfGoToActionDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfGoToActionDictionary_autogen.h"
+
+std::string SkPdfGoToActionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfGoToActionDictionary::getDAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfGoToActionDictionary::getDAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfGoToActionDictionary::getDAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfGoToActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfGoToActionDictionary_autogen.h
index 2e04730..3f40dc3 100644
--- a/experimental/PdfViewer/autogen/SkPdfGoToActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfGoToActionDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required) The destination to jump to (see Section 8.2.1, "Destinations").
 **/
   bool has_D() const {
@@ -551,39 +545,21 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getDAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getDAsName() const;
   bool isDAString() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getDAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getDAsString() const;
   bool isDAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getDAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getDAsArray() const;
 };
 
 #endif  // __DEFINED__SkPdfGoToActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfGraphicsStateDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfGraphicsStateDictionary_autogen.cpp
new file mode 100644
index 0000000..440588c
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfGraphicsStateDictionary_autogen.cpp
@@ -0,0 +1,261 @@
+#include "SkPdfGraphicsStateDictionary_autogen.h"
+
+std::string SkPdfGraphicsStateDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+double SkPdfGraphicsStateDictionary::LW() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LW", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfGraphicsStateDictionary::LC() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LC", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfGraphicsStateDictionary::LJ() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LJ", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfGraphicsStateDictionary::ML() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ML", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfGraphicsStateDictionary::D() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfGraphicsStateDictionary::RI() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RI", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+bool SkPdfGraphicsStateDictionary::OP() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OP", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+bool SkPdfGraphicsStateDictionary::op() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "op", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+long SkPdfGraphicsStateDictionary::OPM() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OPM", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfGraphicsStateDictionary::Font() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Font", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfFunction SkPdfGraphicsStateDictionary::BG() const {
+  SkPdfFunction ret;
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BG", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+SkPdfFunction SkPdfGraphicsStateDictionary::getBG2AsFunction() const {
+  SkPdfFunction ret = SkPdfFunction();
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BG2", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+std::string SkPdfGraphicsStateDictionary::getBG2AsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BG2", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfFunction SkPdfGraphicsStateDictionary::UCR() const {
+  SkPdfFunction ret;
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "UCR", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+SkPdfFunction SkPdfGraphicsStateDictionary::getUCR2AsFunction() const {
+  SkPdfFunction ret = SkPdfFunction();
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "UCR2", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+std::string SkPdfGraphicsStateDictionary::getUCR2AsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "UCR2", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfFunction SkPdfGraphicsStateDictionary::getTRAsFunction() const {
+  SkPdfFunction ret = SkPdfFunction();
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+SkPdfArray* SkPdfGraphicsStateDictionary::getTRAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfGraphicsStateDictionary::getTRAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfFunction SkPdfGraphicsStateDictionary::getTR2AsFunction() const {
+  SkPdfFunction ret = SkPdfFunction();
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR2", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+SkPdfArray* SkPdfGraphicsStateDictionary::getTR2AsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR2", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfGraphicsStateDictionary::getTR2AsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR2", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfGraphicsStateDictionary::getHTAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HT", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfGraphicsStateDictionary::getHTAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HT", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfGraphicsStateDictionary::getHTAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HT", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+double SkPdfGraphicsStateDictionary::FL() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FL", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfGraphicsStateDictionary::SM() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SM", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+bool SkPdfGraphicsStateDictionary::SA() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SA", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+std::string SkPdfGraphicsStateDictionary::getBMAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BM", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfGraphicsStateDictionary::getBMAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BM", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfGraphicsStateDictionary::getSMaskAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SMask", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfGraphicsStateDictionary::getSMaskAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SMask", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+double SkPdfGraphicsStateDictionary::CA() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CA", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfGraphicsStateDictionary::ca() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ca", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+bool SkPdfGraphicsStateDictionary::AIS() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AIS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+bool SkPdfGraphicsStateDictionary::TK() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TK", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfGraphicsStateDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfGraphicsStateDictionary_autogen.h
index 7cb5f01..63947df 100644
--- a/experimental/PdfViewer/autogen/SkPdfGraphicsStateDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfGraphicsStateDictionary_autogen.h
@@ -532,65 +532,35 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Optional; PDF 1.3) The line width (see "Line Width" on page 152).
 **/
   bool has_LW() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LW", "", NULL));
   }
 
-  double LW() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LW", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double LW() const;
 /** (Optional; PDF 1.3) The line cap style (see "Line Cap Style" on page 153).
 **/
   bool has_LC() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LC", "", NULL));
   }
 
-  long LC() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LC", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long LC() const;
 /** (Optional; PDF 1.3) The line join style (see "Line Join Style" on page 153).
 **/
   bool has_LJ() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LJ", "", NULL));
   }
 
-  long LJ() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LJ", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long LJ() const;
 /** (Optional; PDF 1.3) The miter limit (see "Miter Limit" on page 153).
 **/
   bool has_ML() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ML", "", NULL));
   }
 
-  double ML() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ML", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double ML() const;
 /** (Optional; PDF 1.3) The line dash pattern, expressed as an array of the form
  *  [dashArray dashPhase], where dashArray is itself an array and dashPhase is an
  *  integer (see "Line Dash Pattern" on page 155).
@@ -599,13 +569,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", NULL));
   }
 
-  SkPdfArray* D() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* D() const;
 /** (Optional; PDF 1.3) The name of the rendering intent (see "Rendering
  *  Intents" on page 197).
 **/
@@ -613,13 +577,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RI", "", NULL));
   }
 
-  std::string RI() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RI", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string RI() const;
 /** (Optional) A flag specifying whether to apply overprint (see Section 4.5.6,
  *  "Overprint Control"). In PDF 1.2 and earlier, there is a single overprint
  *  parameter that applies to all painting operations. Beginning with PDF 1.3,
@@ -632,13 +590,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OP", "", NULL));
   }
 
-  bool OP() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OP", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool OP() const;
 /** (Optional; PDF 1.3) A flag specifying whether to apply overprint (see Section
  *  4.5.6, "Overprint Control") for painting operations other than stroking. If
  *  this entry is absent, the OP entry, if any, sets this parameter.
@@ -647,13 +599,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "op", "", NULL));
   }
 
-  bool op() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "op", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool op() const;
 /** (Optional; PDF 1.3) The overprint mode (see Section 4.5.6, "Overprint Con-
  *  trol").
 **/
@@ -661,13 +607,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OPM", "", NULL));
   }
 
-  long OPM() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OPM", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long OPM() const;
 /** (Optional; PDF 1.3) An array of the form [font size], where font is an indirect
  *  reference to a font dictionary and size is a number expressed in text space
  *  units. These two objects correspond to the operands of the Tf operator (see
@@ -678,13 +618,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Font", "", NULL));
   }
 
-  SkPdfArray* Font() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Font", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Font() const;
 /** (Optional) The black-generation function, which maps the interval [0.0 1.0]
  *  to the interval [0.0 1.0] (see Section 6.2.3, "Conversion from DeviceRGB to
  *  DeviceCMYK").
@@ -693,13 +627,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BG", "", NULL));
   }
 
-  SkPdfFunction BG() const {
-    SkPdfFunction ret;
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BG", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction BG() const;
 /** (Optional; PDF 1.3) Same as BG except that the value may also be the name
  *  Default, denoting the black-generation function that was in effect at the start
  *  of the page. If both BG and BG2 are present in the same graphics state param-
@@ -715,26 +643,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfFunction getBG2AsFunction() const {
-    SkPdfFunction ret = SkPdfFunction();
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BG2", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction getBG2AsFunction() const;
   bool isBG2AName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BG2", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getBG2AsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BG2", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getBG2AsName() const;
 /** (Optional) The undercolor-removal function, which maps the interval
  *  [0.0 1.0] to the interval [-1.0 1.0] (see Section 6.2.3, "Conversion from
  *  DeviceRGB to DeviceCMYK").
@@ -743,13 +659,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "UCR", "", NULL));
   }
 
-  SkPdfFunction UCR() const {
-    SkPdfFunction ret;
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "UCR", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction UCR() const;
 /** (Optional; PDF 1.3) Same as UCR except that the value may also be the name
  *  Default, denoting the undercolor-removal function that was in effect at the
  *  start of the page. If both UCR and UCR2 are present in the same graphics state
@@ -765,26 +675,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfFunction getUCR2AsFunction() const {
-    SkPdfFunction ret = SkPdfFunction();
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "UCR2", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction getUCR2AsFunction() const;
   bool isUCR2AName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "UCR2", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getUCR2AsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "UCR2", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getUCR2AsName() const;
 /** (Optional) The transfer function, which maps the interval [0.0 1.0] to the
  *  interval [0.0 1.0] (see Section 6.3, "Transfer Functions"). The value is either
  *  a single function (which applies to all process colorants) or an array of four
@@ -801,39 +699,21 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfFunction getTRAsFunction() const {
-    SkPdfFunction ret = SkPdfFunction();
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction getTRAsFunction() const;
   bool isTRAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getTRAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getTRAsArray() const;
   bool isTRAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getTRAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getTRAsName() const;
 /** (Optional; PDF 1.3) Same as TR except that the value may also be the name
  *  Default, denoting the transfer function that was in effect at the start of the
  *  page. If both TR and TR2 are present in the same graphics state parameter dic-
@@ -849,39 +729,21 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfFunction getTR2AsFunction() const {
-    SkPdfFunction ret = SkPdfFunction();
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR2", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction getTR2AsFunction() const;
   bool isTR2AArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR2", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getTR2AsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR2", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getTR2AsArray() const;
   bool isTR2AName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR2", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getTR2AsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR2", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getTR2AsName() const;
 /** (Optional) The halftone dictionary or stream (see Section 6.4, "Halftones")
  *  or the name Default, denoting the halftone that was in effect at the start of the
  *  page.
@@ -896,39 +758,21 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getHTAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HT", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getHTAsDictionary() const;
   bool isHTAStream() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HT", "", &ret)) return false;
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getHTAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HT", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getHTAsStream() const;
   bool isHTAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HT", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getHTAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HT", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getHTAsName() const;
 /** (Optional; PDF 1.3) The flatness tolerance (see Section 6.5.1, "Flatness Toler-
  *  ance").
 **/
@@ -936,13 +780,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FL", "", NULL));
   }
 
-  double FL() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FL", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double FL() const;
 /** (Optional; PDF 1.3) The smoothness tolerance (see Section 6.5.2, "Smooth-
  *  ness Tolerance").
 **/
@@ -950,13 +788,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SM", "", NULL));
   }
 
-  double SM() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SM", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double SM() const;
 /** (Optional) A flag specifying whether to apply automatic stroke adjustment
  *  (see Section 6.5.4, "Automatic Stroke Adjustment").
 **/
@@ -964,13 +796,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SA", "", NULL));
   }
 
-  bool SA() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SA", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool SA() const;
 /** (Optional; PDF 1.4) The current blend mode to be used in the transparent
  *  imaging model (see Sections 7.2.4, "Blend Mode," and 7.5.2, "Specifying
  *  Blending Color Space and Blend Mode").
@@ -985,26 +811,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getBMAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BM", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getBMAsName() const;
   bool isBMAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BM", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getBMAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BM", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getBMAsArray() const;
 /** (Optional; PDF 1.4) The current soft mask, specifying the mask shape or
  *  mask opacity values to be used in the transparent imaging model (see
  *  "Source Shape and Opacity" on page 421 and "Mask Shape and Opacity" on
@@ -1024,26 +838,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getSMaskAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SMask", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getSMaskAsDictionary() const;
   bool isSMaskAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SMask", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getSMaskAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SMask", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getSMaskAsName() const;
 /** (Optional; PDF 1.4) The current stroking alpha constant, specifying the con-
  *  stant shape or constant opacity value to be used for stroking operations in the
  *  transparent imaging model (see "Source Shape and Opacity" on page 421
@@ -1053,26 +855,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CA", "", NULL));
   }
 
-  double CA() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CA", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double CA() const;
 /** (Optional; PDF 1.4) Same as CA, but for nonstroking operations.
 **/
   bool has_ca() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ca", "", NULL));
   }
 
-  double ca() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ca", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double ca() const;
 /** (Optional; PDF 1.4) The alpha source flag ("alpha is shape"), specifying
  *  whether the current soft mask and alpha constant are to be interpreted as
  *  shape values (true) or opacity values (false).
@@ -1081,13 +871,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AIS", "", NULL));
   }
 
-  bool AIS() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AIS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool AIS() const;
 /** (Optional; PDF 1.4) The text knockout flag, which determines the behavior
  *  of overlapping glyphs within a text object in the transparent imaging model
  *  (see Section 5.2.7, "Text Knockout").
@@ -1096,13 +880,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TK", "", NULL));
   }
 
-  bool TK() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TK", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool TK() const;
 };
 
 #endif  // __DEFINED__SkPdfGraphicsStateDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfGroupAttributesDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfGroupAttributesDictionary_autogen.cpp
new file mode 100644
index 0000000..17d0354
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfGroupAttributesDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfGroupAttributesDictionary_autogen.h"
+
+std::string SkPdfGroupAttributesDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfGroupAttributesDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfGroupAttributesDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfGroupAttributesDictionary_autogen.h
index 7ac962b..e630507 100644
--- a/experimental/PdfViewer/autogen/SkPdfGroupAttributesDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfGroupAttributesDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The group subtype, which identifies the type of group whose at-
  *  tributes this dictionary describes and determines the format and meaning of the
  *  dictionary's remaining entries. The only group subtype defined in PDF 1.4 is
@@ -550,13 +544,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 };
 
 #endif  // __DEFINED__SkPdfGroupAttributesDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfHeaders_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfHeaders_autogen.cpp
new file mode 100644
index 0000000..86217e1
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfHeaders_autogen.cpp
@@ -0,0 +1,180 @@
+#include "SkPdfHeaders_autogen.h"
+#include "SkPdfJavascriptActionDictionary_autogen.cpp"
+#include "SkPdfMovieAnnotationDictionary_autogen.cpp"
+#include "SkPdfMetadataStreamDictionary_autogen.cpp"
+#include "SkPdfPageTreeNodeDictionary_autogen.cpp"
+#include "SkPdfWebCaptureCommandDictionary_autogen.cpp"
+#include "SkPdfAnnotationActionsDictionary_autogen.cpp"
+#include "SkPdfInkAnnotationDictionary_autogen.cpp"
+#include "SkPdfWindowsLaunchActionDictionary_autogen.cpp"
+#include "SkPdfBeadDictionary_autogen.cpp"
+#include "SkPdfPageObjectDictionary_autogen.cpp"
+#include "SkPdfType16HalftoneDictionary_autogen.cpp"
+#include "SkPdfObject_autogen.cpp"
+#include "SkPdfFontDescriptorDictionary_autogen.cpp"
+#include "SkPdfLaunchActionDictionary_autogen.cpp"
+#include "SkPdfType3FontDictionary_autogen.cpp"
+#include "SkPdfMovieActionDictionary_autogen.cpp"
+#include "SkPdfBorderStyleDictionary_autogen.cpp"
+#include "SkPdfNamedActionsDictionary_autogen.cpp"
+#include "SkPdfLzwdecodeAndFlatedecodeFiltersDictionary_autogen.cpp"
+#include "SkPdfTrueTypeFontDictionary_autogen.cpp"
+#include "SkPdfJavascriptDictionary_autogen.cpp"
+#include "SkPdfFDFTrailerDictionary_autogen.cpp"
+#include "SkPdfMultiMasterFontDictionary_autogen.cpp"
+#include "SkPdfEmbeddedFileStreamDictionary_autogen.cpp"
+#include "SkPdfAppearanceDictionary_autogen.cpp"
+#include "SkPdfRadioButtonFieldDictionary_autogen.cpp"
+#include "SkPdfType6HalftoneDictionary_autogen.cpp"
+#include "SkPdfFDFNamedPageReferenceDictionary_autogen.cpp"
+#include "SkPdfReference_autogen.cpp"
+#include "SkPdfWebCaptureImageSetDictionary_autogen.cpp"
+#include "SkPdfBlockLevelStructureElementsDictionary_autogen.cpp"
+#include "SkPdfViewerPreferencesDictionary_autogen.cpp"
+#include "SkPdfType3FunctionDictionary_autogen.cpp"
+#include "SkPdfFieldDictionary_autogen.cpp"
+#include "SkPdfAnnotationDictionary_autogen.cpp"
+#include "SkPdfType3ShadingDictionary_autogen.cpp"
+#include "SkPdfType1HalftoneDictionary_autogen.cpp"
+#include "SkPdfActionDictionary_autogen.cpp"
+#include "SkPdfDocumentInformationDictionary_autogen.cpp"
+#include "SkPdfStructureElementDictionary_autogen.cpp"
+#include "SkPdfIccProfileStreamDictionary_autogen.cpp"
+#include "SkPdfType1FontDictionary_autogen.cpp"
+#include "SkPdfTextFieldDictionary_autogen.cpp"
+#include "SkPdfGroupAttributesDictionary_autogen.cpp"
+#include "SkPdfFileSpecificationDictionary_autogen.cpp"
+#include "SkPdfRubberStampAnnotationDictionary_autogen.cpp"
+#include "SkPdfSoftMaskImageDictionary_autogen.cpp"
+#include "SkPdfTrapNetworkAnnotationDictionary_autogen.cpp"
+#include "SkPdfRemoteGoToActionDictionary_autogen.cpp"
+#include "SkPdfMarkInformationDictionary_autogen.cpp"
+#include "SkPdfComponentsWithMetadataDictionary_autogen.cpp"
+#include "SkPdfString_autogen.cpp"
+#include "SkPdfAlternateImageDictionary_autogen.cpp"
+#include "SkPdfArtifactsDictionary_autogen.cpp"
+#include "SkPdfPrinterMarkFormDictionary_autogen.cpp"
+#include "SkPdfFreeTextAnnotationDictionary_autogen.cpp"
+#include "SkPdfLineAnnotationDictionary_autogen.cpp"
+#include "SkPdfFDFFileAnnotationDictionary_autogen.cpp"
+#include "SkPdfWebCaptureDictionary_autogen.cpp"
+#include "SkPdfPageObjectActionsDictionary_autogen.cpp"
+#include "SkPdfSeparationDictionary_autogen.cpp"
+#include "SkPdfSoftMaskDictionary_autogen.cpp"
+#include "SkPdfURLAliasDictionary_autogen.cpp"
+#include "SkPdfListAttributeDictionary_autogen.cpp"
+#include "SkPdfResourceDictionary_autogen.cpp"
+#include "SkPdfNameTreeNodeDictionary_autogen.cpp"
+#include "SkPdfIconFitDictionary_autogen.cpp"
+#include "SkPdfImportDataActionDictionary_autogen.cpp"
+#include "SkPdfTransparencyGroupDictionary_autogen.cpp"
+#include "SkPdfInteractiveFormDictionary_autogen.cpp"
+#include "SkPdfMovieActivationDictionary_autogen.cpp"
+#include "SkPdfPageLabelDictionary_autogen.cpp"
+#include "SkPdfLabColorSpaceDictionary_autogen.cpp"
+#include "SkPdfFDFCatalogDictionary_autogen.cpp"
+#include "SkPdfALinkAnnotationDictionary_autogen.cpp"
+#include "SkPdfAppearanceCharacteristicsDictionary_autogen.cpp"
+#include "SkPdfStream_autogen.cpp"
+#include "SkPdfTransitionDictionary_autogen.cpp"
+#include "SkPdfApplicationDataDictionary_autogen.cpp"
+#include "SkPdfFileAttachmentAnnotationDictionary_autogen.cpp"
+#include "SkPdfGraphicsStateDictionary_autogen.cpp"
+#include "SkPdfType0FontDictionary_autogen.cpp"
+#include "SkPdfMacOsFileInformationDictionary_autogen.cpp"
+#include "SkPdfWebCapturePageSetDictionary_autogen.cpp"
+#include "SkPdfNumberTreeNodeDictionary_autogen.cpp"
+#include "SkPdfURIActionDictionary_autogen.cpp"
+#include "SkPdfVariableTextFieldDictionary_autogen.cpp"
+#include "SkPdfJbig2DecodeFilterDictionary_autogen.cpp"
+#include "SkPdfSourceInformationDictionary_autogen.cpp"
+#include "SkPdfFDFDictionary_autogen.cpp"
+#include "SkPdfThreadActionDictionary_autogen.cpp"
+#include "SkPdfReferenceDictionary_autogen.cpp"
+#include "SkPdfEncodingDictionary_autogen.cpp"
+#include "SkPdfFDFFieldDictionary_autogen.cpp"
+#include "SkPdfAttributeObjectDictionary_autogen.cpp"
+#include "SkPdfCIDSystemInfoDictionary_autogen.cpp"
+#include "SkPdfMarkedContentReferenceDictionary_autogen.cpp"
+#include "SkPdfResetFormActionDictionary_autogen.cpp"
+#include "SkPdfDictionary_autogen.cpp"
+#include "SkPdfCalgrayColorSpaceDictionary_autogen.cpp"
+#include "SkPdfSquareOrCircleAnnotation_autogen.cpp"
+#include "SkPdfTableAttributesDictionary_autogen.cpp"
+#include "SkPdfSubmitFormActionDictionary_autogen.cpp"
+#include "SkPdfType2FunctionDictionary_autogen.cpp"
+#include "SkPdfCheckboxFieldDictionary_autogen.cpp"
+#include "SkPdfBoxStyleDictionary_autogen.cpp"
+#include "SkPdfInteger_autogen.cpp"
+#include "SkPdfType1PatternDictionary_autogen.cpp"
+#include "SkPdfHexString_autogen.cpp"
+#include "SkPdfPagePieceDictionary_autogen.cpp"
+#include "SkPdfEncryptedEmbeddedFileStreamDictionary_autogen.cpp"
+#include "SkPdfWebCaptureCommandSettingsDictionary_autogen.cpp"
+#include "SkPdfType2ShadingDictionary_autogen.cpp"
+#include "SkPdfInlineLevelStructureElementsDictionary_autogen.cpp"
+#include "SkPdfMarkupAnnotationsDictionary_autogen.cpp"
+#include "SkPdfPopUpAnnotationDictionary_autogen.cpp"
+#include "SkPdfFormFieldActionsDictionary_autogen.cpp"
+#include "SkPdfTrapNetworkAppearanceStreamDictionary_autogen.cpp"
+#include "SkPdfSoundObjectDictionary_autogen.cpp"
+#include "SkPdfOutlineItemDictionary_autogen.cpp"
+#include "SkPdfCIDFontDescriptorDictionary_autogen.cpp"
+#include "SkPdfCMapDictionary_autogen.cpp"
+#include "SkPdfNumber_autogen.cpp"
+#include "SkPdfTextAnnotationDictionary_autogen.cpp"
+#include "SkPdfType2PatternDictionary_autogen.cpp"
+#include "SkPdfPSXobjectDictionary_autogen.cpp"
+#include "SkPdfOutlineDictionary_autogen.cpp"
+#include "SkPdfThreadDictionary_autogen.cpp"
+#include "SkPdfImageDictionary_autogen.cpp"
+#include "SkPdfCIDFontDictionary_autogen.cpp"
+#include "SkPdfType5ShadingDictionary_autogen.cpp"
+#include "SkPdfType5HalftoneDictionary_autogen.cpp"
+#include "SkPdfOpiVersionDictionary_autogen.cpp"
+#include "SkPdfStructureElementAccessDictionary_autogen.cpp"
+#include "SkPdfDocumentCatalogActionsDictionary_autogen.cpp"
+#include "SkPdfDeviceNColorSpaceDictionary_autogen.cpp"
+#include "SkPdfMovieDictionary_autogen.cpp"
+#include "SkPdfWidgetAnnotationDictionary_autogen.cpp"
+#include "SkPdfShadingDictionary_autogen.cpp"
+#include "SkPdfCatalogDictionary_autogen.cpp"
+#include "SkPdfStructureTreeRootDictionary_autogen.cpp"
+#include "SkPdfType6ShadingDictionary_autogen.cpp"
+#include "SkPdfFileTrailerDictionary_autogen.cpp"
+#include "SkPdfFDFTemplateDictionary_autogen.cpp"
+#include "SkPdfEmbeddedFileParameterDictionary_autogen.cpp"
+#include "SkPdfBoxColorInformationDictionary_autogen.cpp"
+#include "SkPdfXObjectDictionary_autogen.cpp"
+#include "SkPdfGoToActionDictionary_autogen.cpp"
+#include "SkPdfObjectReferenceDictionary_autogen.cpp"
+#include "SkPdfBoolean_autogen.cpp"
+#include "SkPdfWebCaptureInformationDictionary_autogen.cpp"
+#include "SkPdfStreamCommonDictionary_autogen.cpp"
+#include "SkPdfDctdecodeFilterDictionary_autogen.cpp"
+#include "SkPdfPrinterMarkAnnotationDictionary_autogen.cpp"
+#include "SkPdfStandardStructureDictionary_autogen.cpp"
+#include "SkPdfName_autogen.cpp"
+#include "SkPdfEncryptionCommonDictionary_autogen.cpp"
+#include "SkPdfStandardSecurityHandlerDictionary_autogen.cpp"
+#include "SkPdfSoundAnnotationDictionary_autogen.cpp"
+#include "SkPdfChoiceFieldDictionary_autogen.cpp"
+#include "SkPdfPDF_XOutputIntentDictionary_autogen.cpp"
+#include "SkPdfType4ShadingDictionary_autogen.cpp"
+#include "SkPdfSoundActionDictionary_autogen.cpp"
+#include "SkPdfNull_autogen.cpp"
+#include "SkPdfType10HalftoneDictionary_autogen.cpp"
+#include "SkPdfEmbeddedFontStreamDictionary_autogen.cpp"
+#include "SkPdfType1ShadingDictionary_autogen.cpp"
+#include "SkPdfNameDictionary_autogen.cpp"
+#include "SkPdfCcittfaxdecodeFilterDictionary_autogen.cpp"
+#include "SkPdfType1FormDictionary_autogen.cpp"
+#include "SkPdfFontDictionary_autogen.cpp"
+#include "SkPdfFunctionCommonDictionary_autogen.cpp"
+#include "SkPdfHideActionDictionary_autogen.cpp"
+#include "SkPdfURIDictionary_autogen.cpp"
+#include "SkPdfSignatureDictionary_autogen.cpp"
+#include "SkPdfArray_autogen.cpp"
+#include "SkPdfType0FunctionDictionary_autogen.cpp"
+#include "SkPdfFDFPageDictionary_autogen.cpp"
+#include "SkPdfCalrgbColorSpaceDictionary_autogen.cpp"
diff --git a/experimental/PdfViewer/autogen/SkPdfHexString_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfHexString_autogen.cpp
new file mode 100644
index 0000000..18d112d
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfHexString_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfHexString_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/SkPdfHideActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfHideActionDictionary_autogen.cpp
new file mode 100644
index 0000000..8c80d7a
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfHideActionDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfHideActionDictionary_autogen.h"
+
+std::string SkPdfHideActionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfHideActionDictionary::getTAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfHideActionDictionary::getTAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfHideActionDictionary::getTAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+bool SkPdfHideActionDictionary::H() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "H", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfHideActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfHideActionDictionary_autogen.h
index e7a97fd..125f339 100644
--- a/experimental/PdfViewer/autogen/SkPdfHideActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfHideActionDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required) The annotation or annotations to be hidden or shown, specified in any
  *  of the following forms:
  *  *  An indirect reference to an annotation dictionary
@@ -557,39 +551,21 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getTAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getTAsDictionary() const;
   bool isTAString() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getTAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getTAsString() const;
   bool isTAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getTAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getTAsArray() const;
 /** (Optional) A flag indicating whether to hide the annotation (true) or show it (false).
  *  Default value: true.
 **/
@@ -597,13 +573,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "H", "", NULL));
   }
 
-  bool H() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "H", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool H() const;
 };
 
 #endif  // __DEFINED__SkPdfHideActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfIccProfileStreamDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfIccProfileStreamDictionary_autogen.cpp
new file mode 100644
index 0000000..4bffd73
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfIccProfileStreamDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfIccProfileStreamDictionary_autogen.h"
+
+long SkPdfIccProfileStreamDictionary::N() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfIccProfileStreamDictionary::getAlternateAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Alternate", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfIccProfileStreamDictionary::getAlternateAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Alternate", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfIccProfileStreamDictionary::Range() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Range", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfIccProfileStreamDictionary::Metadata() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfIccProfileStreamDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfIccProfileStreamDictionary_autogen.h
index 565cb34..e163528 100644
--- a/experimental/PdfViewer/autogen/SkPdfIccProfileStreamDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfIccProfileStreamDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", NULL));
   }
 
-  long N() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long N() const;
 /** (Optional) An alternate color space to be used in case the one specified in the stream
  *  data is not supported (for example, by viewer applications designed for earlier
  *  versions of PDF). The alternate space may be any valid color space (except a Pattern
@@ -562,26 +556,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getAlternateAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Alternate", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getAlternateAsArray() const;
   bool isAlternateAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Alternate", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getAlternateAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Alternate", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getAlternateAsName() const;
 /** (Optional) An array of 2 x N numbers [min0 max0 min1 max1 ... ] specifying the
  *  minimum and maximum valid values of the corresponding color components.
  *  These values must match the information in the ICC profile. Default value:
@@ -591,13 +573,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Range", "", NULL));
   }
 
-  SkPdfArray* Range() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Range", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Range() const;
 /** (Optional; PDF 1.4) A metadata stream containing metadata for the color space (see
  *  Section 9.2.2, "Metadata Streams").
 **/
@@ -605,13 +581,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", NULL));
   }
 
-  SkPdfStream* Metadata() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Metadata() const;
 };
 
 #endif  // __DEFINED__SkPdfIccProfileStreamDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfIconFitDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfIconFitDictionary_autogen.cpp
new file mode 100644
index 0000000..d271706
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfIconFitDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfIconFitDictionary_autogen.h"
+
+std::string SkPdfIconFitDictionary::SW() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SW", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfIconFitDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfIconFitDictionary::A() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfIconFitDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfIconFitDictionary_autogen.h
index 60f7889..b9b49cb 100644
--- a/experimental/PdfViewer/autogen/SkPdfIconFitDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfIconFitDictionary_autogen.h
@@ -537,13 +537,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SW", "", NULL));
   }
 
-  std::string SW() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SW", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string SW() const;
 /** (Required) The type of scaling to use:
  *      A    Anamorphic scaling: scale the icon to fill the annotation rectangle exactly, with-
  *           out regard to its original aspect ratio (ratio of width to height).
@@ -557,13 +551,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required) An array of two numbers between 0.0 and 1.0 indicating the fraction of left-
  *  over space to allocate at the left and bottom of the icon. A value of [0.0 0.0] positions the
  *  icon at the bottom-left corner of the annotation rectangle; a value of [0.5 0.5] centers it
@@ -574,13 +562,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", NULL));
   }
 
-  SkPdfArray* A() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* A() const;
 };
 
 #endif  // __DEFINED__SkPdfIconFitDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfImageDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfImageDictionary_autogen.cpp
new file mode 100644
index 0000000..a2c5eef
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfImageDictionary_autogen.cpp
@@ -0,0 +1,142 @@
+#include "SkPdfImageDictionary_autogen.h"
+
+std::string SkPdfImageDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfImageDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfImageDictionary::Width() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfImageDictionary::Height() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfImageDictionary::getColorSpaceAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfImageDictionary::getColorSpaceAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfImageDictionary::BitsPerComponent() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfImageDictionary::Intent() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Intent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+bool SkPdfImageDictionary::ImageMask() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ImageMask", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+SkPdfStream* SkPdfImageDictionary::getMaskAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mask", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfImageDictionary::getMaskAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mask", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfImageDictionary::SMask() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SMask", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfImageDictionary::Decode() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+bool SkPdfImageDictionary::Interpolate() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Interpolate", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+SkPdfArray* SkPdfImageDictionary::Alternates() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Alternates", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfImageDictionary::Name() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfImageDictionary::StructParent() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfImageDictionary::ID() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfImageDictionary::OPI() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OPI", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfImageDictionary::Metadata() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfImageDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfImageDictionary_autogen.h
index c46cf5f..8eb481a 100644
--- a/experimental/PdfViewer/autogen/SkPdfImageDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfImageDictionary_autogen.h
@@ -37,13 +37,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The type of XObject that this dictionary describes; must be
  *  Image for an image XObject.
 **/
@@ -51,39 +45,21 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required) The width of the image, in samples.
 **/
   bool has_Width() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", NULL));
   }
 
-  long Width() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Width() const;
 /** (Required) The height of the image, in samples.
 **/
   bool has_Height() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", NULL));
   }
 
-  long Height() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Height() const;
 /** (Required except for image masks; not allowed for image masks) The color
  *  space in which image samples are specified. This may be any type of color
  *  space except Pattern.
@@ -98,26 +74,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getColorSpaceAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getColorSpaceAsName() const;
   bool isColorSpaceAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getColorSpaceAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getColorSpaceAsArray() const;
 /** (Required except for image masks; optional for image masks) The number of
  *  bits used to represent each color component. Only a single value may be
  *  specified; the number of bits is the same for all color components. Valid
@@ -134,13 +98,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", NULL));
   }
 
-  long BitsPerComponent() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long BitsPerComponent() const;
 /** (Optional; PDF 1.1) The name of a color rendering intent to be used in
  *  rendering the image (see "Rendering Intents" on page 197). Default value:
  *  the current rendering intent in the graphics state.
@@ -149,13 +107,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Intent", "", NULL));
   }
 
-  std::string Intent() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Intent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Intent() const;
 /** (Optional) A flag indicating whether the image is to be treated as an image
  *  mask (see Section 4.8.5, "Masked Images"). If this flag is true, the value of
  *  BitsPerComponent must be 1 and Mask and ColorSpace should not be
@@ -166,13 +118,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ImageMask", "", NULL));
   }
 
-  bool ImageMask() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ImageMask", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool ImageMask() const;
 /** (Optional except for image masks; not allowed for image masks; PDF 1.3) An
  *  image XObject defining an image mask to be applied to this image (see
  *  "Explicit Masking" on page 277), or an array specifying a range of colors
@@ -190,26 +136,14 @@
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getMaskAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mask", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getMaskAsStream() const;
   bool isMaskAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mask", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getMaskAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mask", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getMaskAsArray() const;
 /** (Optional; PDF 1.4) A subsidiary image XObject defining a soft-mask
  *  image (see "Soft-Mask Images" on page 447) to be used as a source of
  *  mask shape or mask opacity values in the transparent imaging model. The
@@ -225,13 +159,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SMask", "", NULL));
   }
 
-  SkPdfStream* SMask() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SMask", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* SMask() const;
 /** (Optional) An array of numbers describing how to map image samples
  *  into the range of values appropriate for the image's color space (see
  *  "Decode Arrays" on page 271). If ImageMask is true, the array must be
@@ -243,13 +171,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", NULL));
   }
 
-  SkPdfArray* Decode() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Decode() const;
 /** (Optional) A flag indicating whether image interpolation is to be per-
  *  formed (see "Image Interpolation" on page 273). Default value: false.
 **/
@@ -257,13 +179,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Interpolate", "", NULL));
   }
 
-  bool Interpolate() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Interpolate", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool Interpolate() const;
 /** (Optional; PDF 1.3) An array of alternate image dictionaries for this image
  *  (see "Alternate Images" on page 273). The order of elements within the
  *  array has no significance. This entry may not be present in an image
@@ -273,13 +189,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Alternates", "", NULL));
   }
 
-  SkPdfArray* Alternates() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Alternates", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Alternates() const;
 /** (Required in PDF 1.0; optional otherwise) The name by which this image
  *  XObject is referenced in the XObject subdictionary of the current resource
  *  dictionary (see Section 3.7.2, "Resource Dictionaries").
@@ -290,13 +200,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", NULL));
   }
 
-  std::string Name() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Name() const;
 /** (Required if the image is a structural content item; PDF 1.3) The integer key
  *  of the image's entry in the structural parent tree (see "Finding Structure
  *  Elements from Content Items" on page 600).
@@ -305,13 +209,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParent", "", NULL));
   }
 
-  long StructParent() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long StructParent() const;
 /** (Optional; PDF 1.3; indirect reference preferred) The digital identifier of the
  *  image's parent Web Capture content set (see Section 9.9.5, "Object At-
  *  tributes Related to Web Capture").
@@ -320,13 +218,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", NULL));
   }
 
-  std::string ID() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string ID() const;
 /** (Optional; PDF 1.2) An OPI version dictionary for the image (see Section
  *  9.10.6, "Open Prepress Interface (OPI)"). If ImageMask is true, this entry
  *  is ignored.
@@ -335,13 +227,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OPI", "", NULL));
   }
 
-  SkPdfDictionary* OPI() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OPI", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* OPI() const;
 /** (Optional; PDF 1.4) A metadata stream containing metadata for the image
  *  (see Section 9.2.2, "Metadata Streams").
 **/
@@ -349,13 +235,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", NULL));
   }
 
-  SkPdfStream* Metadata() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Metadata() const;
 };
 
 #endif  // __DEFINED__SkPdfImageDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfImportDataActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfImportDataActionDictionary_autogen.cpp
new file mode 100644
index 0000000..0b1d026
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfImportDataActionDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfImportDataActionDictionary_autogen.h"
+
+std::string SkPdfImportDataActionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfFileSpec SkPdfImportDataActionDictionary::F() const {
+  SkPdfFileSpec ret;
+  if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFileSpec();
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfImportDataActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfImportDataActionDictionary_autogen.h
index 896dd6b..8c51cd2 100644
--- a/experimental/PdfViewer/autogen/SkPdfImportDataActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfImportDataActionDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required) The FDF file from which to import the data. (See implementation
  *  notes 87 and 88 in Appendix H.)
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  SkPdfFileSpec F() const {
-    SkPdfFileSpec ret;
-    if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFileSpec();
-  }
-
+  SkPdfFileSpec F() const;
 };
 
 #endif  // __DEFINED__SkPdfImportDataActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfInkAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfInkAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..351d9cc
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfInkAnnotationDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfInkAnnotationDictionary_autogen.h"
+
+std::string SkPdfInkAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfInkAnnotationDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfInkAnnotationDictionary::InkList() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "InkList", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfInkAnnotationDictionary::BS() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfInkAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfInkAnnotationDictionary_autogen.h
index 7347299..943846b 100644
--- a/experimental/PdfViewer/autogen/SkPdfInkAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfInkAnnotationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required) The text to be displayed in the pop-up window when the annotation
  *  is opened. Carriage returns may be used to separate the text into paragraphs.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Required) An array of n arrays, each representing a stroked path. Each array is a
  *  series of alternating horizontal and vertical coordinates in default user space,
  *  specifying points along the path. When drawn, the points are connected by
@@ -563,13 +551,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "InkList", "", NULL));
   }
 
-  SkPdfArray* InkList() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "InkList", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* InkList() const;
 /** (Optional) A border style dictionary (see Table 8.12 on page 495) specifying the
  *  line width and dash pattern to be used in drawing the paths.
  *  Note: The annotation dictionary's AP entry, if present, takes precedence over the
@@ -580,13 +562,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BS", "", NULL));
   }
 
-  SkPdfDictionary* BS() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* BS() const;
 };
 
 #endif  // __DEFINED__SkPdfInkAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfInlineLevelStructureElementsDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfInlineLevelStructureElementsDictionary_autogen.cpp
new file mode 100644
index 0000000..495d722
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfInlineLevelStructureElementsDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfInlineLevelStructureElementsDictionary_autogen.h"
+
+double SkPdfInlineLevelStructureElementsDictionary::getLineHeightAsNumber() const {
+  double ret = 0;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LineHeight", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfInlineLevelStructureElementsDictionary::getLineHeightAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LineHeight", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfInlineLevelStructureElementsDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfInlineLevelStructureElementsDictionary_autogen.h
index 1c8a9bd..1fad174 100644
--- a/experimental/PdfViewer/autogen/SkPdfInlineLevelStructureElementsDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfInlineLevelStructureElementsDictionary_autogen.h
@@ -547,26 +547,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Real || ret->podofo()->GetDataType() == ePdfDataType_Number;
   }
 
-  double getLineHeightAsNumber() const {
-    double ret = 0;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LineHeight", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double getLineHeightAsNumber() const;
   bool isLineHeightAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LineHeight", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getLineHeightAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LineHeight", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getLineHeightAsName() const;
 };
 
 #endif  // __DEFINED__SkPdfInlineLevelStructureElementsDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfInteger_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfInteger_autogen.cpp
new file mode 100644
index 0000000..a95fd0d
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfInteger_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfInteger_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/SkPdfInteractiveFormDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfInteractiveFormDictionary_autogen.cpp
new file mode 100644
index 0000000..301c91d
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfInteractiveFormDictionary_autogen.cpp
@@ -0,0 +1,51 @@
+#include "SkPdfInteractiveFormDictionary_autogen.h"
+
+SkPdfArray* SkPdfInteractiveFormDictionary::Fields() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+bool SkPdfInteractiveFormDictionary::NeedAppearances() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "NeedAppearances", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+long SkPdfInteractiveFormDictionary::SigFlags() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SigFlags", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfInteractiveFormDictionary::CO() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CO", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfInteractiveFormDictionary::DR() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DR", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfInteractiveFormDictionary::DA() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DA", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfInteractiveFormDictionary::Q() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Q", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfInteractiveFormDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfInteractiveFormDictionary_autogen.h
index 2837857..8720dce 100644
--- a/experimental/PdfViewer/autogen/SkPdfInteractiveFormDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfInteractiveFormDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", NULL));
   }
 
-  SkPdfArray* Fields() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Fields() const;
 /** (Optional) A flag specifying whether to construct appearance streams and
  *  appearance dictionaries for all widget annotations in the document (see
  *  "Variable Text" on page 533). Default value: false.
@@ -547,13 +541,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "NeedAppearances", "", NULL));
   }
 
-  bool NeedAppearances() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "NeedAppearances", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool NeedAppearances() const;
 /** (Optional; PDF 1.3) A set of flags specifying various document-level char-
  *  acteristics related to signature fields (see Table 8.48, below, and "Signature
  *  Fields" on page 547). Default value: 0.
@@ -562,13 +550,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SigFlags", "", NULL));
   }
 
-  long SigFlags() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SigFlags", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long SigFlags() const;
 /** (Required if any fields in the document have additional-actions dictionaries
  *  containing a C entry; PDF 1.3) An array of indirect references to field dic-
  *  tionaries with calculation actions, defining the calculation order in which
@@ -579,13 +561,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CO", "", NULL));
   }
 
-  SkPdfArray* CO() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CO", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* CO() const;
 /** (Optional) A document-wide default value for the DR attribute of variable
  *  text fields (see "Variable Text" on page 533).
 **/
@@ -593,13 +569,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DR", "", NULL));
   }
 
-  SkPdfDictionary* DR() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DR", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* DR() const;
 /** (Optional) A document-wide default value for the DA attribute of variable
  *  text fields (see "Variable Text" on page 533).
 **/
@@ -607,13 +577,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DA", "", NULL));
   }
 
-  std::string DA() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DA", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string DA() const;
 /** (Optional) A document-wide default value for the Q attribute of variable
  *  text fields (see "Variable Text" on page 533).
 **/
@@ -621,13 +585,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Q", "", NULL));
   }
 
-  long Q() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Q", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Q() const;
 };
 
 #endif  // __DEFINED__SkPdfInteractiveFormDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfJavascriptActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfJavascriptActionDictionary_autogen.cpp
new file mode 100644
index 0000000..c31145f
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfJavascriptActionDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfJavascriptActionDictionary_autogen.h"
+
+std::string SkPdfJavascriptActionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfJavascriptActionDictionary::getJSAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfJavascriptActionDictionary::getJSAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfJavascriptActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfJavascriptActionDictionary_autogen.h
index fdac070..fa3a1ae 100644
--- a/experimental/PdfViewer/autogen/SkPdfJavascriptActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfJavascriptActionDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required) A string or stream containing the JavaScript script to be executed.
  *  Note: PDFDocEncoding or Unicode encoding (the latter identified by the Unicode
  *  prefix U+ FEFF) is used to encode the contents of the string or stream. (See imple-
@@ -554,26 +548,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getJSAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getJSAsString() const;
   bool isJSAStream() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JS", "", &ret)) return false;
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getJSAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getJSAsStream() const;
 };
 
 #endif  // __DEFINED__SkPdfJavascriptActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfJavascriptDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfJavascriptDictionary_autogen.cpp
new file mode 100644
index 0000000..8204e69
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfJavascriptDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfJavascriptDictionary_autogen.h"
+
+std::string SkPdfJavascriptDictionary::getBeforeAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Before", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfJavascriptDictionary::getBeforeAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Before", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfJavascriptDictionary::getAfterAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "After", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfJavascriptDictionary::getAfterAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "After", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfJavascriptDictionary::Doc() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Doc", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfJavascriptDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfJavascriptDictionary_autogen.h
index 4a1ee00..42f3ba5 100644
--- a/experimental/PdfViewer/autogen/SkPdfJavascriptDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfJavascriptDictionary_autogen.h
@@ -538,26 +538,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getBeforeAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Before", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getBeforeAsString() const;
   bool isBeforeAStream() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Before", "", &ret)) return false;
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getBeforeAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Before", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getBeforeAsStream() const;
 /** (Optional) A string or stream containing a JavaScript script to be executed
  *  just after the FDF file is imported.
 **/
@@ -571,26 +559,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getAfterAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "After", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getAfterAsString() const;
   bool isAfterAStream() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "After", "", &ret)) return false;
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getAfterAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "After", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getAfterAsStream() const;
 /** (Optional) An array defining additional JavaScript scripts to be added to
  *  those defined in the JavaScript entry of the document's name dictionary (see
  *  Section 3.6.3, "Name Dictionary"). The array contains an even number of
@@ -605,13 +581,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Doc", "", NULL));
   }
 
-  SkPdfArray* Doc() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Doc", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Doc() const;
 };
 
 #endif  // __DEFINED__SkPdfJavascriptDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfJbig2DecodeFilterDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfJbig2DecodeFilterDictionary_autogen.cpp
new file mode 100644
index 0000000..d86a9cf
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfJbig2DecodeFilterDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfJbig2DecodeFilterDictionary_autogen.h"
+
+SkPdfStream* SkPdfJbig2DecodeFilterDictionary::JBIG2Globals() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JBIG2Globals", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfJbig2DecodeFilterDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfJbig2DecodeFilterDictionary_autogen.h
index 2f457fb..ecb6fc7 100644
--- a/experimental/PdfViewer/autogen/SkPdfJbig2DecodeFilterDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfJbig2DecodeFilterDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JBIG2Globals", "", NULL));
   }
 
-  SkPdfStream* JBIG2Globals() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JBIG2Globals", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* JBIG2Globals() const;
 };
 
 #endif  // __DEFINED__SkPdfJbig2DecodeFilterDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfLabColorSpaceDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfLabColorSpaceDictionary_autogen.cpp
new file mode 100644
index 0000000..ddc3a19
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfLabColorSpaceDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfLabColorSpaceDictionary_autogen.h"
+
+SkPdfArray* SkPdfLabColorSpaceDictionary::WhitePoint() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WhitePoint", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfLabColorSpaceDictionary::BlackPoint() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlackPoint", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfLabColorSpaceDictionary::Range() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Range", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfLabColorSpaceDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfLabColorSpaceDictionary_autogen.h
index 52fb023..bc8dd7e 100644
--- a/experimental/PdfViewer/autogen/SkPdfLabColorSpaceDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfLabColorSpaceDictionary_autogen.h
@@ -534,13 +534,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WhitePoint", "", NULL));
   }
 
-  SkPdfArray* WhitePoint() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WhitePoint", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* WhitePoint() const;
 /** (Optional) An array of three numbers [ XB YB ZB ] specifying the tristimulus value, in
  *  the CIE 1931 XYZ space, of the diffuse black point; see "CalRGB Color Spaces" on
  *  page 184 for further discussion. All three of these numbers must be nonnegative.
@@ -550,13 +544,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlackPoint", "", NULL));
   }
 
-  SkPdfArray* BlackPoint() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BlackPoint", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* BlackPoint() const;
 /** (Optional) An array of four numbers [ amin amax bmin bmax ] specifying the range of
  *  valid values for the a* and b* (B and C) components of the color space-that is,
  *        a min <= a* <= a max
@@ -569,13 +557,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Range", "", NULL));
   }
 
-  SkPdfArray* Range() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Range", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Range() const;
 };
 
 #endif  // __DEFINED__SkPdfLabColorSpaceDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfLaunchActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfLaunchActionDictionary_autogen.cpp
new file mode 100644
index 0000000..b643d15
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfLaunchActionDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfLaunchActionDictionary_autogen.h"
+
+std::string SkPdfLaunchActionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfFileSpec SkPdfLaunchActionDictionary::F() const {
+  SkPdfFileSpec ret;
+  if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFileSpec();
+}
+
+SkPdfDictionary* SkPdfLaunchActionDictionary::Win() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Win", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfObject* SkPdfLaunchActionDictionary::Mac() const {
+  SkPdfObject* ret;
+  if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mac", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfObject* SkPdfLaunchActionDictionary::Unix() const {
+  SkPdfObject* ret;
+  if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Unix", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+bool SkPdfLaunchActionDictionary::NewWindow() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "NewWindow", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfLaunchActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfLaunchActionDictionary_autogen.h
index 5fbb763..f3bc768 100644
--- a/experimental/PdfViewer/autogen/SkPdfLaunchActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfLaunchActionDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required if none of the entries Win, Mac, or Unix is present) The application to
  *  be launched or the document to be opened or printed. If this entry is absent
  *  and the viewer application does not understand any of the alternative entries,
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  SkPdfFileSpec F() const {
-    SkPdfFileSpec ret;
-    if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFileSpec();
-  }
-
+  SkPdfFileSpec F() const;
 /** (Optional) A dictionary containing Windows-specific launch parameters (see
  *  the Table 8.38; see also implementation note 73 in Appendix H).
 **/
@@ -562,39 +550,21 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Win", "", NULL));
   }
 
-  SkPdfDictionary* Win() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Win", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Win() const;
 /** (Optional) Mac OS'specific launch parameters; not yet defined.
 **/
   bool has_Mac() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mac", "", NULL));
   }
 
-  SkPdfObject* Mac() const {
-    SkPdfObject* ret;
-    if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mac", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfObject* Mac() const;
 /** (Optional) UNIX-specific launch parameters; not yet defined.
 **/
   bool has_Unix() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Unix", "", NULL));
   }
 
-  SkPdfObject* Unix() const {
-    SkPdfObject* ret;
-    if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Unix", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfObject* Unix() const;
 /** (Optional; PDF 1.2) A flag specifying whether to open the destination docu-
  *  ment in a new window. If this flag is false, the destination document will
  *  replace the current document in the same window. If this entry is absent, the
@@ -606,13 +576,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "NewWindow", "", NULL));
   }
 
-  bool NewWindow() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "NewWindow", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool NewWindow() const;
 };
 
 #endif  // __DEFINED__SkPdfLaunchActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfLineAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfLineAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..d5c040a
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfLineAnnotationDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfLineAnnotationDictionary_autogen.h"
+
+std::string SkPdfLineAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfLineAnnotationDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfLineAnnotationDictionary::L() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "L", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfLineAnnotationDictionary::BS() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfLineAnnotationDictionary::LE() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LE", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfLineAnnotationDictionary::IC() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IC", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfLineAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfLineAnnotationDictionary_autogen.h
index 29f5758..0a0716b 100644
--- a/experimental/PdfViewer/autogen/SkPdfLineAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfLineAnnotationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required) The text to be displayed in the pop-up window when the annotation
  *  is opened. Carriage returns may be used to separate the text into paragraphs.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Required) An array of four numbers, [x1 y1 x2 y2 ], specifying the starting and
  *  ending coordinates of the line in default user space.
 **/
@@ -560,13 +548,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "L", "", NULL));
   }
 
-  SkPdfArray* L() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "L", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* L() const;
 /** (Optional) A border style dictionary (see Table 8.12 on page 495) specifying the
  *  width and dash pattern to be used in drawing the line.
  *  Note: The annotation dictionary's AP entry, if present, takes precedence over the L
@@ -576,13 +558,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BS", "", NULL));
   }
 
-  SkPdfDictionary* BS() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* BS() const;
 /** (Optional; PDF 1.4) An array of two names specifying the line ending styles to be
  *  used in drawing the line. The first and second elements of the array specify the
  *  line ending styles for the endpoints defined, respectively, by the first and second
@@ -593,13 +569,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LE", "", NULL));
   }
 
-  SkPdfArray* LE() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LE", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* LE() const;
 /** (Optional; PDF 1.4) An array of three numbers in the range 0.0 to 1.0 specifying
  *  the components, in the DeviceRGB color space, of the interior color with which to
  *  fill the annotation's line endings (see Table 8.19). If this entry is absent, the inte-
@@ -609,13 +579,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IC", "", NULL));
   }
 
-  SkPdfArray* IC() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IC", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* IC() const;
 };
 
 #endif  // __DEFINED__SkPdfLineAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfListAttributeDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfListAttributeDictionary_autogen.cpp
new file mode 100644
index 0000000..8d6b29e
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfListAttributeDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfListAttributeDictionary_autogen.h"
+
+std::string SkPdfListAttributeDictionary::ListNumbering() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ListNumbering", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfListAttributeDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfListAttributeDictionary_autogen.h
index 8b8bbe3..7463e3b 100644
--- a/experimental/PdfViewer/autogen/SkPdfListAttributeDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfListAttributeDictionary_autogen.h
@@ -548,13 +548,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ListNumbering", "", NULL));
   }
 
-  std::string ListNumbering() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ListNumbering", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string ListNumbering() const;
 };
 
 #endif  // __DEFINED__SkPdfListAttributeDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfLzwdecodeAndFlatedecodeFiltersDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfLzwdecodeAndFlatedecodeFiltersDictionary_autogen.cpp
new file mode 100644
index 0000000..8b3541d
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfLzwdecodeAndFlatedecodeFiltersDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfLzwdecodeAndFlatedecodeFiltersDictionary_autogen.h"
+
+long SkPdfLzwdecodeAndFlatedecodeFiltersDictionary::Predictor() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Predictor", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfLzwdecodeAndFlatedecodeFiltersDictionary::Colors() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Colors", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfLzwdecodeAndFlatedecodeFiltersDictionary::BitsPerComponent() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfLzwdecodeAndFlatedecodeFiltersDictionary::Columns() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Columns", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfLzwdecodeAndFlatedecodeFiltersDictionary::EarlyChange() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EarlyChange", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfLzwdecodeAndFlatedecodeFiltersDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfLzwdecodeAndFlatedecodeFiltersDictionary_autogen.h
index eb43ba2..08f8e00 100644
--- a/experimental/PdfViewer/autogen/SkPdfLzwdecodeAndFlatedecodeFiltersDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfLzwdecodeAndFlatedecodeFiltersDictionary_autogen.h
@@ -536,13 +536,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Predictor", "", NULL));
   }
 
-  long Predictor() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Predictor", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Predictor() const;
 /** (Used only if Predictor is greater than 1) The number of interleaved color com-
  *  ponents per sample. Valid values are 1 to 4 in PDF 1.2 or earlier, and 1 or
  *  greater in PDF 1.3 or later. Default value: 1.
@@ -551,13 +545,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Colors", "", NULL));
   }
 
-  long Colors() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Colors", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Colors() const;
 /** (Used only if Predictor is greater than 1) The number of bits used to represent
  *  each color component in a sample. Valid values are 1, 2, 4, and 8. Default
  *  value: 8.
@@ -566,13 +554,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", NULL));
   }
 
-  long BitsPerComponent() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long BitsPerComponent() const;
 /** (Used only if Predictor is greater than 1) The number of samples in each row.
  *  Default value: 1.
 **/
@@ -580,13 +562,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Columns", "", NULL));
   }
 
-  long Columns() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Columns", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Columns() const;
 /** (LZWDecode only) An indication of when to increase the code length. If the
  *  value of this entry is 0, code length increases are postponed as long as pos-
  *  sible. If it is 1, they occur one code early. This parameter is included because
@@ -597,13 +573,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EarlyChange", "", NULL));
   }
 
-  long EarlyChange() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EarlyChange", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long EarlyChange() const;
 };
 
 #endif  // __DEFINED__SkPdfLzwdecodeAndFlatedecodeFiltersDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfMacOsFileInformationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfMacOsFileInformationDictionary_autogen.cpp
new file mode 100644
index 0000000..d43e0e7
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfMacOsFileInformationDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfMacOsFileInformationDictionary_autogen.h"
+
+std::string SkPdfMacOsFileInformationDictionary::Subtype() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfMacOsFileInformationDictionary::Creator() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Creator", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfMacOsFileInformationDictionary::ResFork() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ResFork", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfMacOsFileInformationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfMacOsFileInformationDictionary_autogen.h
index 5e070c8..f6b2eaa 100644
--- a/experimental/PdfViewer/autogen/SkPdfMacOsFileInformationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfMacOsFileInformationDictionary_autogen.h
@@ -531,39 +531,21 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Optional) The embedded file's creator signature.
 **/
   bool has_Creator() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Creator", "", NULL));
   }
 
-  std::string Creator() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Creator", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Creator() const;
 /** (Optional) The binary contents of the embedded file's resource fork.
 **/
   bool has_ResFork() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ResFork", "", NULL));
   }
 
-  SkPdfStream* ResFork() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ResFork", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* ResFork() const;
 };
 
 #endif  // __DEFINED__SkPdfMacOsFileInformationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfMarkInformationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfMarkInformationDictionary_autogen.cpp
new file mode 100644
index 0000000..2a5c8ec
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfMarkInformationDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfMarkInformationDictionary_autogen.h"
+
+bool SkPdfMarkInformationDictionary::Marked() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Marked", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfMarkInformationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfMarkInformationDictionary_autogen.h
index c88d491..3a3a2b9 100644
--- a/experimental/PdfViewer/autogen/SkPdfMarkInformationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfMarkInformationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Marked", "", NULL));
   }
 
-  bool Marked() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Marked", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool Marked() const;
 };
 
 #endif  // __DEFINED__SkPdfMarkInformationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfMarkedContentReferenceDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfMarkedContentReferenceDictionary_autogen.cpp
new file mode 100644
index 0000000..0b8cf8a
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfMarkedContentReferenceDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfMarkedContentReferenceDictionary_autogen.h"
+
+std::string SkPdfMarkedContentReferenceDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfMarkedContentReferenceDictionary::Pg() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pg", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfMarkedContentReferenceDictionary::Stm() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Stm", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfObject* SkPdfMarkedContentReferenceDictionary::StmOwn() const {
+  SkPdfObject* ret;
+  if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StmOwn", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfMarkedContentReferenceDictionary::MCID() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MCID", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfMarkedContentReferenceDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfMarkedContentReferenceDictionary_autogen.h
index bf0f64f..1e3522b 100644
--- a/experimental/PdfViewer/autogen/SkPdfMarkedContentReferenceDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfMarkedContentReferenceDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Optional; must be an indirect reference) The page object representing the page on
  *  which the graphics objects in the marked-content sequence are rendered. This
  *  entry overrides any Pg entry in the structure element containing the marked-
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pg", "", NULL));
   }
 
-  SkPdfDictionary* Pg() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pg", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Pg() const;
 /** (Optional; must be an indirect reference) The content stream containing the
  *  marked-content sequence. This entry is needed only if the marked-content
  *  sequence resides in some other content stream associated with the page-for
@@ -566,13 +554,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Stm", "", NULL));
   }
 
-  SkPdfStream* Stm() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Stm", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Stm() const;
 /** (Optional; must be an indirect reference) The PDF object owning the stream
  *  identified by Stm-for example, the annotation to which an appearance stream
  *  belongs.
@@ -581,13 +563,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StmOwn", "", NULL));
   }
 
-  SkPdfObject* StmOwn() const {
-    SkPdfObject* ret;
-    if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StmOwn", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfObject* StmOwn() const;
 /** (Required) The marked-content identifier of the marked-content sequence with-
  *  in its content stream.
 **/
@@ -595,13 +571,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MCID", "", NULL));
   }
 
-  long MCID() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MCID", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long MCID() const;
 };
 
 #endif  // __DEFINED__SkPdfMarkedContentReferenceDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfMarkupAnnotationsDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfMarkupAnnotationsDictionary_autogen.cpp
new file mode 100644
index 0000000..440c92a
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfMarkupAnnotationsDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfMarkupAnnotationsDictionary_autogen.h"
+
+std::string SkPdfMarkupAnnotationsDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfMarkupAnnotationsDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfMarkupAnnotationsDictionary::QuadPoints() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "QuadPoints", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfMarkupAnnotationsDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfMarkupAnnotationsDictionary_autogen.h
index dc754b2..747ac24 100644
--- a/experimental/PdfViewer/autogen/SkPdfMarkupAnnotationsDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfMarkupAnnotationsDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required) The text to be displayed in the pop-up window when the annota-
  *  tion is opened. Carriage returns may be used to separate the text into para-
  *  graphs.
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Required) An array of 8 x n numbers specifying the coordinates of n quadri-
  *  laterals in default user space. Each quadrilateral encompasses a word or
  *  group of contiguous words in the text underlying the annotation. The coor-
@@ -579,13 +567,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "QuadPoints", "", NULL));
   }
 
-  SkPdfArray* QuadPoints() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "QuadPoints", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* QuadPoints() const;
 };
 
 #endif  // __DEFINED__SkPdfMarkupAnnotationsDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfMetadataStreamDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfMetadataStreamDictionary_autogen.cpp
new file mode 100644
index 0000000..6ce1677
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfMetadataStreamDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfMetadataStreamDictionary_autogen.h"
+
+std::string SkPdfMetadataStreamDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfMetadataStreamDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfMetadataStreamDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfMetadataStreamDictionary_autogen.h
index 0c8798f..2724d10 100644
--- a/experimental/PdfViewer/autogen/SkPdfMetadataStreamDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfMetadataStreamDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The type of metadata stream that this dictionary describes; must be
  *  XML.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 };
 
 #endif  // __DEFINED__SkPdfMetadataStreamDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfMovieActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfMovieActionDictionary_autogen.cpp
new file mode 100644
index 0000000..9211e45
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfMovieActionDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfMovieActionDictionary_autogen.h"
+
+std::string SkPdfMovieActionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfMovieActionDictionary::Annot() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Annot", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfMovieActionDictionary::T() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfMovieActionDictionary::Operation() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Operation", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfMovieActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfMovieActionDictionary_autogen.h
index 2b2e193..41348bc 100644
--- a/experimental/PdfViewer/autogen/SkPdfMovieActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfMovieActionDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Optional) An indirect reference to a movie annotation identifying the movie
  *  to be played.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Annot", "", NULL));
   }
 
-  SkPdfDictionary* Annot() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Annot", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Annot() const;
 /** (Optional) The title of a movie annotation identifying the movie to be
  *  played.
  *  Note: The dictionary must include either an Annot or a T entry, but not both.
@@ -561,13 +549,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", NULL));
   }
 
-  std::string T() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string T() const;
 /** (Optional) The operation to be performed on the movie:
  *     Play         Start playing the movie, using the play mode specified by the
  *                  dictionary's Mode entry (see Table 8.79 on page 571). If the
@@ -583,13 +565,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Operation", "", NULL));
   }
 
-  std::string Operation() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Operation", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Operation() const;
 };
 
 #endif  // __DEFINED__SkPdfMovieActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfMovieActivationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfMovieActivationDictionary_autogen.cpp
new file mode 100644
index 0000000..1d327a5
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfMovieActivationDictionary_autogen.cpp
@@ -0,0 +1,65 @@
+#include "SkPdfMovieActivationDictionary_autogen.h"
+
+SkPdfObject* SkPdfMovieActivationDictionary::Start() const {
+  SkPdfObject* ret;
+  if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Start", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfObject* SkPdfMovieActivationDictionary::Duration() const {
+  SkPdfObject* ret;
+  if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Duration", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+double SkPdfMovieActivationDictionary::Rate() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rate", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfMovieActivationDictionary::Volume() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Volume", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+bool SkPdfMovieActivationDictionary::ShowControls() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ShowControls", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+std::string SkPdfMovieActivationDictionary::Mode() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+bool SkPdfMovieActivationDictionary::Synchronous() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Synchronous", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+SkPdfArray* SkPdfMovieActivationDictionary::FWScale() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FWScale", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfMovieActivationDictionary::FWPosition() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FWPosition", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfMovieActivationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfMovieActivationDictionary_autogen.h
index 88fe52b..b3702db 100644
--- a/experimental/PdfViewer/autogen/SkPdfMovieActivationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfMovieActivationDictionary_autogen.h
@@ -544,13 +544,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Start", "", NULL));
   }
 
-  SkPdfObject* Start() const {
-    SkPdfObject* ret;
-    if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Start", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfObject* Start() const;
 /** (Optional) The duration of the movie segment to be played, specified in the
  *  same form as Start. Negative values specify that the movie is to be played
  *  backward. If this entry is omitted, the movie is played to the end.
@@ -559,13 +553,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Duration", "", NULL));
   }
 
-  SkPdfObject* Duration() const {
-    SkPdfObject* ret;
-    if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Duration", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfObject* Duration() const;
 /** (Optional) The initial speed at which to play the movie. If the value of this
  *  entry is negative, the movie is played backward with respect to Start and
  *  Duration. Default value: 1.0.
@@ -574,13 +562,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rate", "", NULL));
   }
 
-  double Rate() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rate", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double Rate() const;
 /** (Optional) The initial sound volume at which to play the movie, in the range
  *  -1.0 to 1.0. Higher values denote greater volume; negative values mute the
  *  sound. Default value: 1.0.
@@ -589,13 +571,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Volume", "", NULL));
   }
 
-  double Volume() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Volume", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double Volume() const;
 /** (Optional) A flag specifying whether to display a movie controller bar while
  *  playing the movie. Default value: false.
 **/
@@ -603,13 +579,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ShowControls", "", NULL));
   }
 
-  bool ShowControls() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ShowControls", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool ShowControls() const;
 /** (Optional) The play mode for playing the movie:
  *      Once              Play once and stop.
  *      Open              Play and leave the movie controller bar open.
@@ -621,13 +591,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mode", "", NULL));
   }
 
-  std::string Mode() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Mode() const;
 /** (Optional) A flag specifying whether to play the movie synchronously or
  *  asynchronously. If this value is true, the movie player will retain control until
  *  the movie is completed or dismissed by the user; if false, it will return control
@@ -638,13 +602,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Synchronous", "", NULL));
   }
 
-  bool Synchronous() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Synchronous", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool Synchronous() const;
 /** (Optional) The magnification (zoom) factor at which to play the movie. The
  *  presence of this entry implies that the movie is to be played in a floating win-
  *  dow; if the entry is absent, it will be played in the annotation rectangle.
@@ -658,13 +616,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FWScale", "", NULL));
   }
 
-  SkPdfArray* FWScale() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FWScale", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* FWScale() const;
 /** (Optional) For floating play windows, the relative position of the window on
  *  the screen. The value is an array of two numbers
  *      [horiz vert]
@@ -677,13 +629,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FWPosition", "", NULL));
   }
 
-  SkPdfArray* FWPosition() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FWPosition", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* FWPosition() const;
 };
 
 #endif  // __DEFINED__SkPdfMovieActivationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfMovieAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfMovieAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..d2e375e
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfMovieAnnotationDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfMovieAnnotationDictionary_autogen.h"
+
+std::string SkPdfMovieAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfMovieAnnotationDictionary::Movie() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Movie", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfMovieAnnotationDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+bool SkPdfMovieAnnotationDictionary::getAAsBoolean() const {
+  bool ret = false;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+SkPdfDictionary* SkPdfMovieAnnotationDictionary::getAAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfMovieAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfMovieAnnotationDictionary_autogen.h
index db13412..5f0218e 100644
--- a/experimental/PdfViewer/autogen/SkPdfMovieAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfMovieAnnotationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required) A movie dictionary describing the movie's static characteristics (see
  *  Section 8.8, "Movies").
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Movie", "", NULL));
   }
 
-  SkPdfDictionary* Movie() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Movie", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Movie() const;
 /** (Optional; PDF 1.4) An alternate representation of the annotation's contents in
  *  human-readable form, useful when extracting the document's contents in sup-
  *  port of accessibility to disabled users or for other purposes (see Section 9.8.2,
@@ -562,13 +550,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Optional) A flag or dictionary specifying whether and how to play the movie
  *  when the annotation is activated. If this value is a dictionary, it is a movie activa-
  *  tion dictionary (see Section 8.8, "Movies") specifying how to play the movie; if it
@@ -586,26 +568,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Bool;
   }
 
-  bool getAAsBoolean() const {
-    bool ret = false;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool getAAsBoolean() const;
   bool isAADictionary() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getAAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getAAsDictionary() const;
 };
 
 #endif  // __DEFINED__SkPdfMovieAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfMovieDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfMovieDictionary_autogen.cpp
new file mode 100644
index 0000000..8f3ba01
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfMovieDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfMovieDictionary_autogen.h"
+
+SkPdfFileSpec SkPdfMovieDictionary::F() const {
+  SkPdfFileSpec ret;
+  if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFileSpec();
+}
+
+SkPdfArray* SkPdfMovieDictionary::Aspect() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Aspect", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfMovieDictionary::Rotate() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rotate", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+bool SkPdfMovieDictionary::getPosterAsBoolean() const {
+  bool ret = false;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Poster", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+SkPdfStream* SkPdfMovieDictionary::getPosterAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Poster", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfMovieDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfMovieDictionary_autogen.h
index 9173414..2fe0d5b 100644
--- a/experimental/PdfViewer/autogen/SkPdfMovieDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfMovieDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  SkPdfFileSpec F() const {
-    SkPdfFileSpec ret;
-    if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFileSpec();
-  }
-
+  SkPdfFileSpec F() const;
 /** (Optional) The width and height of the movie's bounding box, in pixels,
  *  specified as [width height]. This entry should be omitted for a movie consist-
  *  ing entirely of sound with no visible images.
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Aspect", "", NULL));
   }
 
-  SkPdfArray* Aspect() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Aspect", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Aspect() const;
 /** (Optional) The number of degrees by which the movie is rotated clockwise
  *  relative to the page. The value must be a multiple of 90. Default value: 0.
 **/
@@ -562,13 +550,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rotate", "", NULL));
   }
 
-  long Rotate() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rotate", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Rotate() const;
 /** (Optional) A flag or stream specifying whether and how to display a poster
  *  image representing the movie. If this value is a stream, it contains an image
  *  XObject (see Section 4.8, "Images") to be displayed as the poster; if it is the
@@ -585,26 +567,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Bool;
   }
 
-  bool getPosterAsBoolean() const {
-    bool ret = false;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Poster", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool getPosterAsBoolean() const;
   bool isPosterAStream() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Poster", "", &ret)) return false;
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getPosterAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Poster", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getPosterAsStream() const;
 };
 
 #endif  // __DEFINED__SkPdfMovieDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfMultiMasterFontDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfMultiMasterFontDictionary_autogen.cpp
new file mode 100644
index 0000000..7cc1b8f
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfMultiMasterFontDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfMultiMasterFontDictionary_autogen.h"
+
+std::string SkPdfMultiMasterFontDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfMultiMasterFontDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfMultiMasterFontDictionary_autogen.h
index 766cf06..6009cb3 100644
--- a/experimental/PdfViewer/autogen/SkPdfMultiMasterFontDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfMultiMasterFontDictionary_autogen.h
@@ -36,13 +36,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 };
 
 #endif  // __DEFINED__SkPdfMultiMasterFontDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfNameDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfNameDictionary_autogen.cpp
new file mode 100644
index 0000000..8cbdd45
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfNameDictionary_autogen.cpp
@@ -0,0 +1,114 @@
+#include "SkPdfNameDictionary_autogen.h"
+
+std::string SkPdfNameDictionary::getDestsAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dests", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfTree* SkPdfNameDictionary::getDestsAsTree() const {
+  SkPdfTree* ret = NULL;
+  if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dests", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfNameDictionary::getAPAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AP", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfTree* SkPdfNameDictionary::getAPAsTree() const {
+  SkPdfTree* ret = NULL;
+  if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AP", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfNameDictionary::getJavaScriptAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JavaScript", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfTree* SkPdfNameDictionary::getJavaScriptAsTree() const {
+  SkPdfTree* ret = NULL;
+  if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JavaScript", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfNameDictionary::getPagesAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfTree* SkPdfNameDictionary::getPagesAsTree() const {
+  SkPdfTree* ret = NULL;
+  if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfNameDictionary::getTemplatesAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Templates", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfTree* SkPdfNameDictionary::getTemplatesAsTree() const {
+  SkPdfTree* ret = NULL;
+  if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Templates", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfNameDictionary::getIDSAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IDS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfTree* SkPdfNameDictionary::getIDSAsTree() const {
+  SkPdfTree* ret = NULL;
+  if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IDS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfNameDictionary::getURLSAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URLS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfTree* SkPdfNameDictionary::getURLSAsTree() const {
+  SkPdfTree* ret = NULL;
+  if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URLS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfNameDictionary::getEmbeddedFilesAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EmbeddedFiles", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfTree* SkPdfNameDictionary::getEmbeddedFilesAsTree() const {
+  SkPdfTree* ret = NULL;
+  if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EmbeddedFiles", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfNameDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfNameDictionary_autogen.h
index 2e1e824..45afd1f 100644
--- a/experimental/PdfViewer/autogen/SkPdfNameDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfNameDictionary_autogen.h
@@ -538,26 +538,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getDestsAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dests", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getDestsAsName() const;
   bool isDestsATree() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dests", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfTree* getDestsAsTree() const {
-    SkPdfTree* ret = NULL;
-    if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dests", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfTree* getDestsAsTree() const;
 /** (Optional; PDF 1.3) A name tree mapping name strings to annotation
  *  appearance streams (see Section 8.4.4, "Appearance Streams").
 **/
@@ -571,26 +559,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getAPAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AP", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getAPAsName() const;
   bool isAPATree() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AP", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfTree* getAPAsTree() const {
-    SkPdfTree* ret = NULL;
-    if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AP", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfTree* getAPAsTree() const;
 /** (Optional; PDF 1.3) A name tree mapping name strings to document-level
  *  JavaScript(R) actions (see "JavaScript Actions" on page 556).
 **/
@@ -604,26 +580,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getJavaScriptAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JavaScript", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getJavaScriptAsName() const;
   bool isJavaScriptATree() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JavaScript", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfTree* getJavaScriptAsTree() const {
-    SkPdfTree* ret = NULL;
-    if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "JavaScript", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfTree* getJavaScriptAsTree() const;
 /** (Optional; PDF 1.3) A name tree mapping name strings to visible pages for
  *  use in interactive forms (see Section 8.6.5, "Named Pages").
 **/
@@ -637,26 +601,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getPagesAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getPagesAsName() const;
   bool isPagesATree() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfTree* getPagesAsTree() const {
-    SkPdfTree* ret = NULL;
-    if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfTree* getPagesAsTree() const;
 /** (Optional; PDF 1.3) A name tree mapping name strings to invisible (tem-
  *  plate) pages for use in interactive forms (see Section 8.6.5, "Named Pages").
 **/
@@ -670,26 +622,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getTemplatesAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Templates", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getTemplatesAsName() const;
   bool isTemplatesATree() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Templates", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfTree* getTemplatesAsTree() const {
-    SkPdfTree* ret = NULL;
-    if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Templates", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfTree* getTemplatesAsTree() const;
 /** (Optional; PDF 1.3) A name tree mapping digital identifiers to Web Capture
  *  content sets (see Section 9.9.3, "Content Sets").
 **/
@@ -703,26 +643,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getIDSAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IDS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getIDSAsName() const;
   bool isIDSATree() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IDS", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfTree* getIDSAsTree() const {
-    SkPdfTree* ret = NULL;
-    if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IDS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfTree* getIDSAsTree() const;
 /** (Optional; PDF 1.3) A name tree mapping uniform resource locators (URLs)
  *  to Web Capture content sets (see Section 9.9.3, "Content Sets").
 **/
@@ -736,26 +664,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getURLSAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URLS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getURLSAsName() const;
   bool isURLSATree() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URLS", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfTree* getURLSAsTree() const {
-    SkPdfTree* ret = NULL;
-    if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URLS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfTree* getURLSAsTree() const;
 /** (Optional; PDF 1.4) A name tree mapping name strings to embedded file
  *  streams (see Section 3.10.3, "Embedded File Streams").
 **/
@@ -769,26 +685,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getEmbeddedFilesAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EmbeddedFiles", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getEmbeddedFilesAsName() const;
   bool isEmbeddedFilesATree() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EmbeddedFiles", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfTree* getEmbeddedFilesAsTree() const {
-    SkPdfTree* ret = NULL;
-    if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "EmbeddedFiles", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfTree* getEmbeddedFilesAsTree() const;
 };
 
 #endif  // __DEFINED__SkPdfNameDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfNameTreeNodeDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfNameTreeNodeDictionary_autogen.cpp
new file mode 100644
index 0000000..e677440
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfNameTreeNodeDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfNameTreeNodeDictionary_autogen.h"
+
+SkPdfArray* SkPdfNameTreeNodeDictionary::Kids() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfNameTreeNodeDictionary::Names() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Names", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfNameTreeNodeDictionary::Limits() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Limits", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfNameTreeNodeDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfNameTreeNodeDictionary_autogen.h
index 6a9afd4..e92e293 100644
--- a/experimental/PdfViewer/autogen/SkPdfNameTreeNodeDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfNameTreeNodeDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", NULL));
   }
 
-  SkPdfArray* Kids() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Kids() const;
 /** (Root and leaf nodes only; required in leaf nodes; present in the root node if and only if Kids
  *  is not present) An array of the form
  *      [key1 value1 key2 value2 ... keyn valuen ]
@@ -550,13 +544,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Names", "", NULL));
   }
 
-  SkPdfArray* Names() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Names", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Names() const;
 /** (Intermediate and leaf nodes only; required) An array of two strings, specifying the (lexi-
  *  cally) least and greatest keys included in the Names array of a leaf node or in the Names
  *  arrays of any leaf nodes that are descendants of an intermediate node.
@@ -565,13 +553,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Limits", "", NULL));
   }
 
-  SkPdfArray* Limits() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Limits", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Limits() const;
 };
 
 #endif  // __DEFINED__SkPdfNameTreeNodeDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfName_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfName_autogen.cpp
new file mode 100644
index 0000000..d986d32
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfName_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfName_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/SkPdfNamedActionsDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfNamedActionsDictionary_autogen.cpp
new file mode 100644
index 0000000..b2b83f0
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfNamedActionsDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfNamedActionsDictionary_autogen.h"
+
+std::string SkPdfNamedActionsDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfNamedActionsDictionary::N() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfNamedActionsDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfNamedActionsDictionary_autogen.h
index 8545683..2f18b39 100644
--- a/experimental/PdfViewer/autogen/SkPdfNamedActionsDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfNamedActionsDictionary_autogen.h
@@ -532,26 +532,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required) The name of the action to be performed (see Table 8.45).
 **/
   bool has_N() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", NULL));
   }
 
-  std::string N() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string N() const;
 };
 
 #endif  // __DEFINED__SkPdfNamedActionsDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfNull_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfNull_autogen.cpp
new file mode 100644
index 0000000..1e65ded
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfNull_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfNull_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/SkPdfNumberTreeNodeDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfNumberTreeNodeDictionary_autogen.cpp
new file mode 100644
index 0000000..002b2bf
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfNumberTreeNodeDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfNumberTreeNodeDictionary_autogen.h"
+
+SkPdfArray* SkPdfNumberTreeNodeDictionary::Kids() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfNumberTreeNodeDictionary::Nums() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Nums", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfNumberTreeNodeDictionary::Limits() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Limits", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfNumberTreeNodeDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfNumberTreeNodeDictionary_autogen.h
index 3cce6af..596744a 100644
--- a/experimental/PdfViewer/autogen/SkPdfNumberTreeNodeDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfNumberTreeNodeDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", NULL));
   }
 
-  SkPdfArray* Kids() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Kids() const;
 /** (Root and leaf nodes only; required in leaf nodes; present in the root node if and only if Kids
  *  is not present) An array of the form
  *      [key1 value1 key2 value2 ... keyn valuen ]
@@ -551,13 +545,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Nums", "", NULL));
   }
 
-  SkPdfArray* Nums() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Nums", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Nums() const;
 /** (Intermediate and leaf nodes only; required) An array of two integers, specifying the
  *  (numerically) least and greatest keys included in the Nums array of a leaf node or in the
  *  Nums arrays of any leaf nodes that are descendants of an intermediate node.
@@ -566,13 +554,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Limits", "", NULL));
   }
 
-  SkPdfArray* Limits() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Limits", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Limits() const;
 };
 
 #endif  // __DEFINED__SkPdfNumberTreeNodeDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfNumber_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfNumber_autogen.cpp
new file mode 100644
index 0000000..f342fff
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfNumber_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfNumber_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/SkPdfObjectReferenceDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfObjectReferenceDictionary_autogen.cpp
new file mode 100644
index 0000000..684aeba
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfObjectReferenceDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfObjectReferenceDictionary_autogen.h"
+
+std::string SkPdfObjectReferenceDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfObjectReferenceDictionary::Pg() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pg", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfObject* SkPdfObjectReferenceDictionary::Obj() const {
+  SkPdfObject* ret;
+  if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Obj", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfObjectReferenceDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfObjectReferenceDictionary_autogen.h
index f6cff49..ea4bc36 100644
--- a/experimental/PdfViewer/autogen/SkPdfObjectReferenceDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfObjectReferenceDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Optional; must be an indirect reference) The page object representing the page on
  *  which the object is rendered. This entry overrides any Pg entry in the structure ele-
  *  ment containing the object reference; it is required if the structure element has no such
@@ -548,26 +542,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pg", "", NULL));
   }
 
-  SkPdfDictionary* Pg() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pg", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Pg() const;
 /** (Required; must be an indirect reference) The referenced object.
 **/
   bool has_Obj() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Obj", "", NULL));
   }
 
-  SkPdfObject* Obj() const {
-    SkPdfObject* ret;
-    if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Obj", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfObject* Obj() const;
 };
 
 #endif  // __DEFINED__SkPdfObjectReferenceDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfObject_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfObject_autogen.cpp
new file mode 100644
index 0000000..f1eb09b
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfObject_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfObject_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/SkPdfOpiVersionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfOpiVersionDictionary_autogen.cpp
new file mode 100644
index 0000000..d02be22
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfOpiVersionDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfOpiVersionDictionary_autogen.h"
+
+SkPdfDictionary* SkPdfOpiVersionDictionary::version_number() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "version_number", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfOpiVersionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfOpiVersionDictionary_autogen.h
index 7da516a..9318fab 100644
--- a/experimental/PdfViewer/autogen/SkPdfOpiVersionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfOpiVersionDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "version_number", "", NULL));
   }
 
-  SkPdfDictionary* version_number() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "version_number", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* version_number() const;
 };
 
 #endif  // __DEFINED__SkPdfOpiVersionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfOutlineDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfOutlineDictionary_autogen.cpp
new file mode 100644
index 0000000..6869d9f
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfOutlineDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfOutlineDictionary_autogen.h"
+
+std::string SkPdfOutlineDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfOutlineDictionary::First() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "First", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfOutlineDictionary::Last() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Last", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfOutlineDictionary::Count() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Count", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfOutlineDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfOutlineDictionary_autogen.h
index 55a13c0..f7163a1 100644
--- a/experimental/PdfViewer/autogen/SkPdfOutlineDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfOutlineDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required; must be an indirect reference) An outline item dictionary represent-
  *  ing the first top-level item in the outline.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "First", "", NULL));
   }
 
-  SkPdfDictionary* First() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "First", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* First() const;
 /** (Required; must be an indirect reference) An outline item dictionary represent-
  *  ing the last top-level item in the outline.
 **/
@@ -560,13 +548,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Last", "", NULL));
   }
 
-  SkPdfDictionary* Last() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Last", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Last() const;
 /** (Required if the document has any open outline entries) The total number of
  *  open items at all levels of the outline. This entry should be omitted if there
  *  are no open outline items.
@@ -575,13 +557,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Count", "", NULL));
   }
 
-  long Count() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Count", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Count() const;
 };
 
 #endif  // __DEFINED__SkPdfOutlineDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfOutlineItemDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfOutlineItemDictionary_autogen.cpp
new file mode 100644
index 0000000..05f5ef8
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfOutlineItemDictionary_autogen.cpp
@@ -0,0 +1,100 @@
+#include "SkPdfOutlineItemDictionary_autogen.h"
+
+std::string SkPdfOutlineItemDictionary::Title() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Title", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfOutlineItemDictionary::Parent() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfOutlineItemDictionary::Prev() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Prev", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfOutlineItemDictionary::Next() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Next", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfOutlineItemDictionary::First() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "First", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfOutlineItemDictionary::Last() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Last", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfOutlineItemDictionary::Count() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Count", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfOutlineItemDictionary::getDestAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfOutlineItemDictionary::getDestAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfOutlineItemDictionary::getDestAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfOutlineItemDictionary::A() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfOutlineItemDictionary::SE() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SE", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfOutlineItemDictionary::C() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfOutlineItemDictionary::F() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfOutlineItemDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfOutlineItemDictionary_autogen.h
index eb74f64..7ca070a 100644
--- a/experimental/PdfViewer/autogen/SkPdfOutlineItemDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfOutlineItemDictionary_autogen.h
@@ -531,13 +531,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Title", "", NULL));
   }
 
-  std::string Title() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Title", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Title() const;
 /** (Required; must be an indirect reference) The parent of this item in the outline
  *  hierarchy. The parent of a top-level item is the outline dictionary itself.
 **/
@@ -545,13 +539,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", NULL));
   }
 
-  SkPdfDictionary* Parent() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Parent() const;
 /** (Required for all but the first item at each level; must be an indirect reference)
  *  The previous item at this outline level.
 **/
@@ -559,13 +547,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Prev", "", NULL));
   }
 
-  SkPdfDictionary* Prev() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Prev", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Prev() const;
 /** (Required for all but the last item at each level; must be an indirect reference)
  *  The next item at this outline level.
 **/
@@ -573,13 +555,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Next", "", NULL));
   }
 
-  SkPdfDictionary* Next() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Next", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Next() const;
 /** (Required if the item has any descendants; must be an indirect reference) The
  *  first of this item's immediate children in the outline hierarchy.
 **/
@@ -587,13 +563,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "First", "", NULL));
   }
 
-  SkPdfDictionary* First() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "First", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* First() const;
 /** (Required if the item has any descendants; must be an indirect reference) The
  *  last of this item's immediate children in the outline hierarchy.
 **/
@@ -601,13 +571,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Last", "", NULL));
   }
 
-  SkPdfDictionary* Last() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Last", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Last() const;
 /** (Required if the item has any descendants) If the item is open, the total num-
  *  ber of its open descendants at all lower levels of the outline hierarchy. If the
  *  item is closed, a negative integer whose absolute value specifies how many
@@ -617,13 +581,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Count", "", NULL));
   }
 
-  long Count() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Count", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Count() const;
 /** (Optional; not permitted if an A entry is present) The destination to be
  *  displayed when this item is activated (see Section 8.2.1, "Destinations"; see
  *  also implementation note 56 in Appendix H).
@@ -638,39 +596,21 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getDestAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getDestAsName() const;
   bool isDestAString() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getDestAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getDestAsString() const;
   bool isDestAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getDestAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dest", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getDestAsArray() const;
 /** (Optional; PDF 1.1; not permitted if a Dest entry is present) The action to be
  *  performed when this item is activated (see Section 8.5, "Actions").
 **/
@@ -678,13 +618,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", NULL));
   }
 
-  SkPdfDictionary* A() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* A() const;
 /** (Optional; PDF 1.3; must be an indirect reference) The structure element to
  *  which the item refers (see Section 9.6.1, "Structure Hierarchy").
  *  Note: The ability to associate an outline item with a structure element (such as
@@ -697,13 +631,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SE", "", NULL));
   }
 
-  SkPdfDictionary* SE() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SE", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* SE() const;
 /** (Optional; PDF 1.4) An array of three numbers in the range 0.0 to 1.0, repre-
  *  senting the components in the DeviceRGB color space of the color to be used
  *  for the outline entry's text. Default value: [0.0 0.0 0.0].
@@ -712,13 +640,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", NULL));
   }
 
-  SkPdfArray* C() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* C() const;
 /** (Optional; PDF 1.4) A set of flags specifying style characteristics for display-
  *  ing the outline item's text (see Table 8.5). Default value: 0.
 **/
@@ -726,13 +648,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  long F() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long F() const;
 };
 
 #endif  // __DEFINED__SkPdfOutlineItemDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfPDF_XOutputIntentDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfPDF_XOutputIntentDictionary_autogen.cpp
new file mode 100644
index 0000000..1d7e095
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfPDF_XOutputIntentDictionary_autogen.cpp
@@ -0,0 +1,51 @@
+#include "SkPdfPDF_XOutputIntentDictionary_autogen.h"
+
+std::string SkPdfPDF_XOutputIntentDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfPDF_XOutputIntentDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfPDF_XOutputIntentDictionary::OutputCondition() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OutputCondition", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfPDF_XOutputIntentDictionary::OutputConditionIdentifier() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OutputConditionIdentifier", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfPDF_XOutputIntentDictionary::RegistryName() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RegistryName", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfPDF_XOutputIntentDictionary::Info() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Info", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfPDF_XOutputIntentDictionary::DestOutputProfile() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DestOutputProfile", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfPDF_XOutputIntentDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfPDF_XOutputIntentDictionary_autogen.h
index 8b21fcf..1d90217 100644
--- a/experimental/PdfViewer/autogen/SkPdfPDF_XOutputIntentDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfPDF_XOutputIntentDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The output intent subtype; must be GTS_PDFX for a
  *  PDF/X output intent.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Optional) A text string concisely identifying the intended out-
  *  put device or production condition in human-readable form.
  *  This is the preferred method of defining such a string for pre-
@@ -562,13 +550,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OutputCondition", "", NULL));
   }
 
-  std::string OutputCondition() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OutputCondition", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string OutputCondition() const;
 /** (Required) A string identifying the intended output device or
  *  production condition in human- or machine-readable form. If
  *  human-readable, this string may be used in lieu of an Output-
@@ -588,13 +570,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OutputConditionIdentifier", "", NULL));
   }
 
-  std::string OutputConditionIdentifier() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OutputConditionIdentifier", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string OutputConditionIdentifier() const;
 /** (Optional) A string (conventionally a uniform resource identifi-
  *  er, or URI) identifying the registry in which the condition desig-
  *  nated by OutputConditionIdentifier is defined.
@@ -603,13 +579,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RegistryName", "", NULL));
   }
 
-  std::string RegistryName() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RegistryName", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string RegistryName() const;
 /** (Required if OutputConditionIdentifier does not specify a standard
  *  production condition; optional otherwise) A human-readable text
  *  string containing additional information or comments about
@@ -619,13 +589,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Info", "", NULL));
   }
 
-  std::string Info() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Info", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Info() const;
 /** (Required if OutputConditionIdentifier does not specify a standard
  *  production condition; optional otherwise) An ICC profile stream
  *  defining the transformation from the PDF document's source
@@ -643,13 +607,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DestOutputProfile", "", NULL));
   }
 
-  SkPdfStream* DestOutputProfile() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DestOutputProfile", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* DestOutputProfile() const;
 };
 
 #endif  // __DEFINED__SkPdfPDF_XOutputIntentDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfPSXobjectDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfPSXobjectDictionary_autogen.cpp
new file mode 100644
index 0000000..85b6802
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfPSXobjectDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfPSXobjectDictionary_autogen.h"
+
+std::string SkPdfPSXobjectDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfPSXobjectDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfPSXobjectDictionary::Level1() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Level1", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfPSXobjectDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfPSXobjectDictionary_autogen.h
index a136f45..d091a0f 100644
--- a/experimental/PdfViewer/autogen/SkPdfPSXobjectDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfPSXobjectDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The type of XObject that this dictionary describes; must be PS for a
  *  PostScript XObject.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Optional) A stream whose contents are to be used in place of the PostScript
  *  XObject's stream when the target PostScript interpreter is known to support only
  *  LanguageLevel 1.
@@ -561,13 +549,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Level1", "", NULL));
   }
 
-  SkPdfStream* Level1() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Level1", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Level1() const;
 };
 
 #endif  // __DEFINED__SkPdfPSXobjectDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfPageLabelDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfPageLabelDictionary_autogen.cpp
new file mode 100644
index 0000000..171b2b5
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfPageLabelDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfPageLabelDictionary_autogen.h"
+
+std::string SkPdfPageLabelDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfPageLabelDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfPageLabelDictionary::P() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfPageLabelDictionary::St() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "St", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfPageLabelDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfPageLabelDictionary_autogen.h
index dceaf55..0912661 100644
--- a/experimental/PdfViewer/autogen/SkPdfPageLabelDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfPageLabelDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Optional) The numbering style to be used for the numeric portion of each page label:
  *     D     Decimal arabic numerals
  *     R     Uppercase roman numerals
@@ -554,26 +548,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Optional) The label prefix for page labels in this range.
 **/
   bool has_P() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", NULL));
   }
 
-  std::string P() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string P() const;
 /** (Optional) The value of the numeric portion for the first page label in the range. Sub-
  *  sequent pages will be numbered sequentially from this value, which must be greater than
  *  or equal to 1. Default value: 1.
@@ -582,13 +564,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "St", "", NULL));
   }
 
-  long St() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "St", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long St() const;
 };
 
 #endif  // __DEFINED__SkPdfPageLabelDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfPageObjectActionsDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfPageObjectActionsDictionary_autogen.cpp
new file mode 100644
index 0000000..e724a83
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfPageObjectActionsDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfPageObjectActionsDictionary_autogen.h"
+
+SkPdfDictionary* SkPdfPageObjectActionsDictionary::O() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfPageObjectActionsDictionary::C() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfPageObjectActionsDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfPageObjectActionsDictionary_autogen.h
index 9a582ce..84bb4f9 100644
--- a/experimental/PdfViewer/autogen/SkPdfPageObjectActionsDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfPageObjectActionsDictionary_autogen.h
@@ -535,13 +535,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", NULL));
   }
 
-  SkPdfDictionary* O() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* O() const;
 /** (Optional; PDF 1.2) An action to be performed when the page is closed (for example,
  *  when the user navigates to the next or previous page or follows a link annotation or an
  *  outline item). This action applies to the page being closed, and is executed before any
@@ -551,13 +545,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", NULL));
   }
 
-  SkPdfDictionary* C() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* C() const;
 };
 
 #endif  // __DEFINED__SkPdfPageObjectActionsDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfPageObjectDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfPageObjectDictionary_autogen.cpp
new file mode 100644
index 0000000..573fb41
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfPageObjectDictionary_autogen.cpp
@@ -0,0 +1,184 @@
+#include "SkPdfPageObjectDictionary_autogen.h"
+
+std::string SkPdfPageObjectDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfPageObjectDictionary::Parent() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDate SkPdfPageObjectDictionary::LastModified() const {
+  SkPdfDate ret;
+  if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastModified", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfDate();
+}
+
+SkPdfDictionary* SkPdfPageObjectDictionary::Resources() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Resources", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkRect* SkPdfPageObjectDictionary::MediaBox() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MediaBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkRect* SkPdfPageObjectDictionary::CropBox() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CropBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkRect* SkPdfPageObjectDictionary::BleedBox() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BleedBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkRect* SkPdfPageObjectDictionary::TrimBox() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TrimBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkRect* SkPdfPageObjectDictionary::ArtBox() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ArtBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfPageObjectDictionary::BoxColorInfo() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BoxColorInfo", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfPageObjectDictionary::getContentsAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfPageObjectDictionary::getContentsAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfPageObjectDictionary::Rotate() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rotate", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfDictionary* SkPdfPageObjectDictionary::Group() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Group", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfPageObjectDictionary::Thumb() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Thumb", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfPageObjectDictionary::B() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "B", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+double SkPdfPageObjectDictionary::Dur() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dur", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfDictionary* SkPdfPageObjectDictionary::Trans() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Trans", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfPageObjectDictionary::Annots() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Annots", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfPageObjectDictionary::AA() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfPageObjectDictionary::Metadata() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfPageObjectDictionary::PieceInfo() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PieceInfo", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfPageObjectDictionary::StructParents() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfPageObjectDictionary::ID() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+double SkPdfPageObjectDictionary::PZ() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PZ", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfDictionary* SkPdfPageObjectDictionary::SeparationInfo() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SeparationInfo", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfPageObjectDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfPageObjectDictionary_autogen.h
index 46d686e..287f8c4 100644
--- a/experimental/PdfViewer/autogen/SkPdfPageObjectDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfPageObjectDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required; must be an indirect reference) The page tree node that is the im-
  *  mediate parent of this page object.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", NULL));
   }
 
-  SkPdfDictionary* Parent() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Parent() const;
 /** (Required if PieceInfo is present; optional otherwise; PDF 1.3) The date and
  *  time (see Section 3.8.2, "Dates") when the page's contents were most re-
  *  cently modified. If a page-piece dictionary (PieceInfo) is present, the
@@ -564,13 +552,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastModified", "", NULL));
   }
 
-  SkPdfDate LastModified() const {
-    SkPdfDate ret;
-    if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastModified", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfDate();
-  }
-
+  SkPdfDate LastModified() const;
 /** (Required; inheritable) A dictionary containing any resources required by
  *  the page (see Section 3.7.2, "Resource Dictionaries"). If the page requires
  *  no resources, the value of this entry should be an empty dictionary; omit-
@@ -581,13 +563,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Resources", "", NULL));
   }
 
-  SkPdfDictionary* Resources() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Resources", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Resources() const;
 /** (Required; inheritable) A rectangle (see Section 3.8.3, "Rectangles"), ex-
  *  pressed in default user space units, defining the boundaries of the physical
  *  medium on which the page is intended to be displayed or printed (see
@@ -597,13 +573,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MediaBox", "", NULL));
   }
 
-  SkRect* MediaBox() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MediaBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* MediaBox() const;
 /** (Optional; inheritable) A rectangle, expressed in default user space units,
  *  defining the visible region of default user space. When the page is dis-
  *  played or printed, its contents are to be clipped (cropped) to this rectangle
@@ -615,13 +585,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CropBox", "", NULL));
   }
 
-  SkRect* CropBox() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CropBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* CropBox() const;
 /** (Optional; PDF 1.3) A rectangle, expressed in default user space units, de-
  *  fining the region to which the contents of the page should be clipped
  *  when output in a production environment (see Section 9.10.1, "Page
@@ -631,13 +595,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BleedBox", "", NULL));
   }
 
-  SkRect* BleedBox() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BleedBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* BleedBox() const;
 /** (Optional; PDF 1.3) A rectangle, expressed in default user space units, de-
  *  fining the intended dimensions of the finished page after trimming (see
  *  Section 9.10.1, "Page Boundaries"). Default value: the value of CropBox.
@@ -646,13 +604,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TrimBox", "", NULL));
   }
 
-  SkRect* TrimBox() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TrimBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* TrimBox() const;
 /** (Optional; PDF 1.3) A rectangle, expressed in default user space units, de-
  *  fining the extent of the page's meaningful content (including potential
  *  white space) as intended by the page's creator (see Section 9.10.1, "Page
@@ -662,13 +614,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ArtBox", "", NULL));
   }
 
-  SkRect* ArtBox() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ArtBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* ArtBox() const;
 /** (Optional) A box color information dictionary specifying the colors and
  *  other visual characteristics to be used in displaying guidelines on the
  *  screen for the various page boundaries (see "Display of Page Boundaries"
@@ -679,13 +625,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BoxColorInfo", "", NULL));
   }
 
-  SkPdfDictionary* BoxColorInfo() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BoxColorInfo", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* BoxColorInfo() const;
 /** (Optional) A content stream (see Section 3.7.1, "Content Streams") de-
  *  scribing the contents of this page. If this entry is absent, the page is empty.
  *  The value may be either a single stream or an array of streams. If it is an
@@ -709,26 +649,14 @@
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getContentsAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getContentsAsStream() const;
   bool isContentsAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getContentsAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getContentsAsArray() const;
 /** (Optional; inheritable) The number of degrees by which the page should
  *  be rotated clockwise when displayed or printed. The value must be a mul-
  *  tiple of 90. Default value: 0.
@@ -737,13 +665,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rotate", "", NULL));
   }
 
-  long Rotate() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Rotate", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Rotate() const;
 /** (Optional; PDF 1.4) A group attributes dictionary specifying the attributes
  *  of the page's page group for use in the transparent imaging model (see
  *  Sections 7.3.6, "Page Group," and 7.5.5, "Transparency Group XObjects").
@@ -752,13 +674,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Group", "", NULL));
   }
 
-  SkPdfDictionary* Group() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Group", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Group() const;
 /** (Optional) A stream object defining the page's thumbnail image (see Sec-
  *  tion 8.2.3, "Thumbnail Images").
 **/
@@ -766,13 +682,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Thumb", "", NULL));
   }
 
-  SkPdfStream* Thumb() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Thumb", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Thumb() const;
 /** (Optional; PDF 1.1; recommended if the page contains article beads) An ar-
  *  ray of indirect references to article beads appearing on the page (see Sec-
  *  tion 8.3.2, "Articles"; see also implementation note 23 in Appendix H).
@@ -782,13 +692,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "B", "", NULL));
   }
 
-  SkPdfArray* B() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "B", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* B() const;
 /** (Optional; PDF 1.1) The page's display duration (also called its advance
  *  timing): the maximum length of time, in seconds, that the page will be
  *  displayed during presentations before the viewer application automati-
@@ -799,13 +703,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dur", "", NULL));
   }
 
-  double Dur() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dur", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double Dur() const;
 /** (Optional; PDF 1.1) A transition dictionary describing the transition effect
  *  to be used when displaying the page during presentations (see Section
  *  8.3.3, "Presentations").
@@ -814,13 +712,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Trans", "", NULL));
   }
 
-  SkPdfDictionary* Trans() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Trans", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Trans() const;
 /** (Optional) An array of annotation dictionaries representing annotations
  *  associated with the page (see Section 8.4, "Annotations").
 **/
@@ -828,13 +720,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Annots", "", NULL));
   }
 
-  SkPdfArray* Annots() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Annots", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Annots() const;
 /** (Optional; PDF 1.2) An additional-actions dictionary defining actions to
  *  be performed when the page is opened or closed (see Section 8.5.2, "Trig-
  *  ger Events"; see also implementation note 24 in Appendix H).
@@ -843,13 +729,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", NULL));
   }
 
-  SkPdfDictionary* AA() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AA", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* AA() const;
 /** (Optional; PDF 1.4) A metadata stream containing metadata for the page
  *  (see Section 9.2.2, "Metadata Streams").
 **/
@@ -857,13 +737,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", NULL));
   }
 
-  SkPdfStream* Metadata() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Metadata() const;
 /** (Optional; PDF 1.3) A page-piece dictionary associated with the page (see
  *  Section 9.4, "Page-Piece Dictionaries").
 **/
@@ -871,13 +745,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PieceInfo", "", NULL));
   }
 
-  SkPdfDictionary* PieceInfo() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PieceInfo", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* PieceInfo() const;
 /** (Required if the page contains structural content items; PDF 1.3) The inte-
  *  ger key of the page's entry in the structural parent tree (see "Finding Struc-
  *  ture Elements from Content Items" on page 600).
@@ -886,13 +754,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParents", "", NULL));
   }
 
-  long StructParents() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long StructParents() const;
 /** (Optional; PDF 1.3; indirect reference preferred) The digital identifier of the
  *  page's parent Web Capture content set (see Section 9.9.5, "Object At-
  *  tributes Related to Web Capture").
@@ -901,13 +763,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", NULL));
   }
 
-  std::string ID() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string ID() const;
 /** (Optional; PDF 1.3) The page's preferred zoom (magnification) factor: the
  *  factor by which it should be scaled to achieve the "natural" display magni-
  *  fication (see Section 9.9.5, "Object Attributes Related to Web Capture").
@@ -916,13 +772,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PZ", "", NULL));
   }
 
-  double PZ() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PZ", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double PZ() const;
 /** (Optional; PDF 1.3) A separation dictionary containing information need-
  *  ed to generate color separations for the page (see Section 9.10.3, "Separa-
  *  tion Dictionaries").
@@ -931,13 +781,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SeparationInfo", "", NULL));
   }
 
-  SkPdfDictionary* SeparationInfo() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SeparationInfo", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* SeparationInfo() const;
 };
 
 #endif  // __DEFINED__SkPdfPageObjectDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfPagePieceDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfPagePieceDictionary_autogen.cpp
new file mode 100644
index 0000000..1252e48
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfPagePieceDictionary_autogen.cpp
@@ -0,0 +1,11 @@
+#include "SkPdfPagePieceDictionary_autogen.h"
+
+/*
+SkPdfDictionary* SkPdfPagePieceDictionary::[any_application_name_or_well_known_data_type]() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "[any_application_name_or_well_known_data_type]", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+*/
diff --git a/experimental/PdfViewer/autogen/SkPdfPagePieceDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfPagePieceDictionary_autogen.h
index 9ffd819..2e6b812 100644
--- a/experimental/PdfViewer/autogen/SkPdfPagePieceDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfPagePieceDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "[any_application_name_or_well_known_data_type]", "", NULL));
   }
 
-  SkPdfDictionary* [any_application_name_or_well_known_data_type]() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "[any_application_name_or_well_known_data_type]", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* [any_application_name_or_well_known_data_type]() const;
 */
 };
 
diff --git a/experimental/PdfViewer/autogen/SkPdfPageTreeNodeDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfPageTreeNodeDictionary_autogen.cpp
new file mode 100644
index 0000000..6103597
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfPageTreeNodeDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfPageTreeNodeDictionary_autogen.h"
+
+std::string SkPdfPageTreeNodeDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfPageTreeNodeDictionary::Parent() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfPageTreeNodeDictionary::Kids() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfPageTreeNodeDictionary::Count() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Count", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfPageTreeNodeDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfPageTreeNodeDictionary_autogen.h
index b1d6d7c..8d370eb 100644
--- a/experimental/PdfViewer/autogen/SkPdfPageTreeNodeDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfPageTreeNodeDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required except in root node; must be an indirect reference) The page tree node that
  *  is the immediate parent of this one.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", NULL));
   }
 
-  SkPdfDictionary* Parent() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Parent() const;
 /** (Required) An array of indirect references to the immediate children of this node.
  *  The children may be page objects or other page tree nodes.
 **/
@@ -560,13 +548,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", NULL));
   }
 
-  SkPdfArray* Kids() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Kids", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Kids() const;
 /** (Required) The number of leaf nodes (page objects) that are descendants of this
  *  node within the page tree.
 **/
@@ -574,13 +556,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Count", "", NULL));
   }
 
-  long Count() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Count", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Count() const;
 };
 
 #endif  // __DEFINED__SkPdfPageTreeNodeDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfPodofoMapper_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfPodofoMapper_autogen.cpp
new file mode 100644
index 0000000..5d2df72
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfPodofoMapper_autogen.cpp
@@ -0,0 +1,5402 @@
+#include "SkPdfPodofoMapper_autogen.h"
+bool mapObject(const SkPdfObject& in, SkPdfObject** out) {
+  return mapObject(*in.doc(), *in.podofo(), out);
+}
+
+bool mapObject(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfObject** out) {
+  if (!isObject(podofoDoc, podofoObj)) return false;
+
+  if (mapArray(podofoDoc, podofoObj, (SkPdfArray**)out)) return true;
+  if (mapBoolean(podofoDoc, podofoObj, (SkPdfBoolean**)out)) return true;
+  if (mapDictionary(podofoDoc, podofoObj, (SkPdfDictionary**)out)) return true;
+  if (mapInteger(podofoDoc, podofoObj, (SkPdfInteger**)out)) return true;
+  if (mapName(podofoDoc, podofoObj, (SkPdfName**)out)) return true;
+  if (mapNull(podofoDoc, podofoObj, (SkPdfNull**)out)) return true;
+  if (mapReference(podofoDoc, podofoObj, (SkPdfReference**)out)) return true;
+  if (mapString(podofoDoc, podofoObj, (SkPdfString**)out)) return true;
+  if (mapStream(podofoDoc, podofoObj, (SkPdfStream**)out)) return true;
+
+  *out = new SkPdfObject(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapNull(const SkPdfObject& in, SkPdfNull** out) {
+  return mapNull(*in.doc(), *in.podofo(), out);
+}
+
+bool mapNull(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNull** out) {
+  if (!isNull(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfNull(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapBoolean(const SkPdfObject& in, SkPdfBoolean** out) {
+  return mapBoolean(*in.doc(), *in.podofo(), out);
+}
+
+bool mapBoolean(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBoolean** out) {
+  if (!isBoolean(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfBoolean(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapInteger(const SkPdfObject& in, SkPdfInteger** out) {
+  return mapInteger(*in.doc(), *in.podofo(), out);
+}
+
+bool mapInteger(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfInteger** out) {
+  if (!isInteger(podofoDoc, podofoObj)) return false;
+
+  if (mapNumber(podofoDoc, podofoObj, (SkPdfNumber**)out)) return true;
+
+  *out = new SkPdfInteger(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapNumber(const SkPdfObject& in, SkPdfNumber** out) {
+  return mapNumber(*in.doc(), *in.podofo(), out);
+}
+
+bool mapNumber(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNumber** out) {
+  if (!isNumber(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfNumber(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapName(const SkPdfObject& in, SkPdfName** out) {
+  return mapName(*in.doc(), *in.podofo(), out);
+}
+
+bool mapName(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfName** out) {
+  if (!isName(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfName(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapReference(const SkPdfObject& in, SkPdfReference** out) {
+  return mapReference(*in.doc(), *in.podofo(), out);
+}
+
+bool mapReference(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfReference** out) {
+  if (!isReference(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfReference(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapArray(const SkPdfObject& in, SkPdfArray** out) {
+  return mapArray(*in.doc(), *in.podofo(), out);
+}
+
+bool mapArray(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfArray** out) {
+  if (!isArray(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfArray(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapString(const SkPdfObject& in, SkPdfString** out) {
+  return mapString(*in.doc(), *in.podofo(), out);
+}
+
+bool mapString(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfString** out) {
+  if (!isString(podofoDoc, podofoObj)) return false;
+
+  if (mapHexString(podofoDoc, podofoObj, (SkPdfHexString**)out)) return true;
+
+  *out = new SkPdfString(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapHexString(const SkPdfObject& in, SkPdfHexString** out) {
+  return mapHexString(*in.doc(), *in.podofo(), out);
+}
+
+bool mapHexString(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfHexString** out) {
+  if (!isHexString(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfHexString(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapDictionary(const SkPdfObject& in, SkPdfDictionary** out) {
+  return mapDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDictionary** out) {
+  if (!isDictionary(podofoDoc, podofoObj)) return false;
+
+  if (mapALinkAnnotationDictionary(podofoDoc, podofoObj, (SkPdfALinkAnnotationDictionary**)out)) return true;
+  if (mapActionDictionary(podofoDoc, podofoObj, (SkPdfActionDictionary**)out)) return true;
+  if (mapAlternateImageDictionary(podofoDoc, podofoObj, (SkPdfAlternateImageDictionary**)out)) return true;
+  if (mapAnnotationActionsDictionary(podofoDoc, podofoObj, (SkPdfAnnotationActionsDictionary**)out)) return true;
+  if (mapAnnotationDictionary(podofoDoc, podofoObj, (SkPdfAnnotationDictionary**)out)) return true;
+  if (mapAppearanceCharacteristicsDictionary(podofoDoc, podofoObj, (SkPdfAppearanceCharacteristicsDictionary**)out)) return true;
+  if (mapAppearanceDictionary(podofoDoc, podofoObj, (SkPdfAppearanceDictionary**)out)) return true;
+  if (mapApplicationDataDictionary(podofoDoc, podofoObj, (SkPdfApplicationDataDictionary**)out)) return true;
+  if (mapArtifactsDictionary(podofoDoc, podofoObj, (SkPdfArtifactsDictionary**)out)) return true;
+  if (mapAttributeObjectDictionary(podofoDoc, podofoObj, (SkPdfAttributeObjectDictionary**)out)) return true;
+  if (mapBeadDictionary(podofoDoc, podofoObj, (SkPdfBeadDictionary**)out)) return true;
+  if (mapBlockLevelStructureElementsDictionary(podofoDoc, podofoObj, (SkPdfBlockLevelStructureElementsDictionary**)out)) return true;
+  if (mapBorderStyleDictionary(podofoDoc, podofoObj, (SkPdfBorderStyleDictionary**)out)) return true;
+  if (mapBoxColorInformationDictionary(podofoDoc, podofoObj, (SkPdfBoxColorInformationDictionary**)out)) return true;
+  if (mapBoxStyleDictionary(podofoDoc, podofoObj, (SkPdfBoxStyleDictionary**)out)) return true;
+  if (mapCIDFontDescriptorDictionary(podofoDoc, podofoObj, (SkPdfCIDFontDescriptorDictionary**)out)) return true;
+  if (mapCIDSystemInfoDictionary(podofoDoc, podofoObj, (SkPdfCIDSystemInfoDictionary**)out)) return true;
+  if (mapCMapDictionary(podofoDoc, podofoObj, (SkPdfCMapDictionary**)out)) return true;
+  if (mapCalgrayColorSpaceDictionary(podofoDoc, podofoObj, (SkPdfCalgrayColorSpaceDictionary**)out)) return true;
+  if (mapCalrgbColorSpaceDictionary(podofoDoc, podofoObj, (SkPdfCalrgbColorSpaceDictionary**)out)) return true;
+  if (mapCatalogDictionary(podofoDoc, podofoObj, (SkPdfCatalogDictionary**)out)) return true;
+  if (mapCcittfaxdecodeFilterDictionary(podofoDoc, podofoObj, (SkPdfCcittfaxdecodeFilterDictionary**)out)) return true;
+  if (mapCheckboxFieldDictionary(podofoDoc, podofoObj, (SkPdfCheckboxFieldDictionary**)out)) return true;
+  if (mapChoiceFieldDictionary(podofoDoc, podofoObj, (SkPdfChoiceFieldDictionary**)out)) return true;
+  if (mapComponentsWithMetadataDictionary(podofoDoc, podofoObj, (SkPdfComponentsWithMetadataDictionary**)out)) return true;
+  if (mapDctdecodeFilterDictionary(podofoDoc, podofoObj, (SkPdfDctdecodeFilterDictionary**)out)) return true;
+  if (mapDeviceNColorSpaceDictionary(podofoDoc, podofoObj, (SkPdfDeviceNColorSpaceDictionary**)out)) return true;
+  if (mapDocumentCatalogActionsDictionary(podofoDoc, podofoObj, (SkPdfDocumentCatalogActionsDictionary**)out)) return true;
+  if (mapDocumentInformationDictionary(podofoDoc, podofoObj, (SkPdfDocumentInformationDictionary**)out)) return true;
+  if (mapEmbeddedFileParameterDictionary(podofoDoc, podofoObj, (SkPdfEmbeddedFileParameterDictionary**)out)) return true;
+  if (mapEmbeddedFileStreamDictionary(podofoDoc, podofoObj, (SkPdfEmbeddedFileStreamDictionary**)out)) return true;
+  if (mapEmbeddedFontStreamDictionary(podofoDoc, podofoObj, (SkPdfEmbeddedFontStreamDictionary**)out)) return true;
+  if (mapEncodingDictionary(podofoDoc, podofoObj, (SkPdfEncodingDictionary**)out)) return true;
+  if (mapEncryptedEmbeddedFileStreamDictionary(podofoDoc, podofoObj, (SkPdfEncryptedEmbeddedFileStreamDictionary**)out)) return true;
+  if (mapEncryptionCommonDictionary(podofoDoc, podofoObj, (SkPdfEncryptionCommonDictionary**)out)) return true;
+  if (mapFDFCatalogDictionary(podofoDoc, podofoObj, (SkPdfFDFCatalogDictionary**)out)) return true;
+  if (mapFDFDictionary(podofoDoc, podofoObj, (SkPdfFDFDictionary**)out)) return true;
+  if (mapFDFFieldDictionary(podofoDoc, podofoObj, (SkPdfFDFFieldDictionary**)out)) return true;
+  if (mapFDFFileAnnotationDictionary(podofoDoc, podofoObj, (SkPdfFDFFileAnnotationDictionary**)out)) return true;
+  if (mapFDFNamedPageReferenceDictionary(podofoDoc, podofoObj, (SkPdfFDFNamedPageReferenceDictionary**)out)) return true;
+  if (mapFDFPageDictionary(podofoDoc, podofoObj, (SkPdfFDFPageDictionary**)out)) return true;
+  if (mapFDFTemplateDictionary(podofoDoc, podofoObj, (SkPdfFDFTemplateDictionary**)out)) return true;
+  if (mapFDFTrailerDictionary(podofoDoc, podofoObj, (SkPdfFDFTrailerDictionary**)out)) return true;
+  if (mapFieldDictionary(podofoDoc, podofoObj, (SkPdfFieldDictionary**)out)) return true;
+  if (mapFileAttachmentAnnotationDictionary(podofoDoc, podofoObj, (SkPdfFileAttachmentAnnotationDictionary**)out)) return true;
+  if (mapFileSpecificationDictionary(podofoDoc, podofoObj, (SkPdfFileSpecificationDictionary**)out)) return true;
+  if (mapFileTrailerDictionary(podofoDoc, podofoObj, (SkPdfFileTrailerDictionary**)out)) return true;
+  if (mapFontDescriptorDictionary(podofoDoc, podofoObj, (SkPdfFontDescriptorDictionary**)out)) return true;
+  if (mapFontDictionary(podofoDoc, podofoObj, (SkPdfFontDictionary**)out)) return true;
+  if (mapFormFieldActionsDictionary(podofoDoc, podofoObj, (SkPdfFormFieldActionsDictionary**)out)) return true;
+  if (mapFreeTextAnnotationDictionary(podofoDoc, podofoObj, (SkPdfFreeTextAnnotationDictionary**)out)) return true;
+  if (mapFunctionCommonDictionary(podofoDoc, podofoObj, (SkPdfFunctionCommonDictionary**)out)) return true;
+  if (mapGoToActionDictionary(podofoDoc, podofoObj, (SkPdfGoToActionDictionary**)out)) return true;
+  if (mapGraphicsStateDictionary(podofoDoc, podofoObj, (SkPdfGraphicsStateDictionary**)out)) return true;
+  if (mapGroupAttributesDictionary(podofoDoc, podofoObj, (SkPdfGroupAttributesDictionary**)out)) return true;
+  if (mapHideActionDictionary(podofoDoc, podofoObj, (SkPdfHideActionDictionary**)out)) return true;
+  if (mapIccProfileStreamDictionary(podofoDoc, podofoObj, (SkPdfIccProfileStreamDictionary**)out)) return true;
+  if (mapIconFitDictionary(podofoDoc, podofoObj, (SkPdfIconFitDictionary**)out)) return true;
+  if (mapImportDataActionDictionary(podofoDoc, podofoObj, (SkPdfImportDataActionDictionary**)out)) return true;
+  if (mapInkAnnotationDictionary(podofoDoc, podofoObj, (SkPdfInkAnnotationDictionary**)out)) return true;
+  if (mapInlineLevelStructureElementsDictionary(podofoDoc, podofoObj, (SkPdfInlineLevelStructureElementsDictionary**)out)) return true;
+  if (mapInteractiveFormDictionary(podofoDoc, podofoObj, (SkPdfInteractiveFormDictionary**)out)) return true;
+  if (mapJavascriptActionDictionary(podofoDoc, podofoObj, (SkPdfJavascriptActionDictionary**)out)) return true;
+  if (mapJavascriptDictionary(podofoDoc, podofoObj, (SkPdfJavascriptDictionary**)out)) return true;
+  if (mapJbig2DecodeFilterDictionary(podofoDoc, podofoObj, (SkPdfJbig2DecodeFilterDictionary**)out)) return true;
+  if (mapLabColorSpaceDictionary(podofoDoc, podofoObj, (SkPdfLabColorSpaceDictionary**)out)) return true;
+  if (mapLaunchActionDictionary(podofoDoc, podofoObj, (SkPdfLaunchActionDictionary**)out)) return true;
+  if (mapLineAnnotationDictionary(podofoDoc, podofoObj, (SkPdfLineAnnotationDictionary**)out)) return true;
+  if (mapListAttributeDictionary(podofoDoc, podofoObj, (SkPdfListAttributeDictionary**)out)) return true;
+  if (mapLzwdecodeAndFlatedecodeFiltersDictionary(podofoDoc, podofoObj, (SkPdfLzwdecodeAndFlatedecodeFiltersDictionary**)out)) return true;
+  if (mapMacOsFileInformationDictionary(podofoDoc, podofoObj, (SkPdfMacOsFileInformationDictionary**)out)) return true;
+  if (mapMarkInformationDictionary(podofoDoc, podofoObj, (SkPdfMarkInformationDictionary**)out)) return true;
+  if (mapMarkedContentReferenceDictionary(podofoDoc, podofoObj, (SkPdfMarkedContentReferenceDictionary**)out)) return true;
+  if (mapMarkupAnnotationsDictionary(podofoDoc, podofoObj, (SkPdfMarkupAnnotationsDictionary**)out)) return true;
+  if (mapMetadataStreamDictionary(podofoDoc, podofoObj, (SkPdfMetadataStreamDictionary**)out)) return true;
+  if (mapMovieActionDictionary(podofoDoc, podofoObj, (SkPdfMovieActionDictionary**)out)) return true;
+  if (mapMovieActivationDictionary(podofoDoc, podofoObj, (SkPdfMovieActivationDictionary**)out)) return true;
+  if (mapMovieAnnotationDictionary(podofoDoc, podofoObj, (SkPdfMovieAnnotationDictionary**)out)) return true;
+  if (mapMovieDictionary(podofoDoc, podofoObj, (SkPdfMovieDictionary**)out)) return true;
+  if (mapNameDictionary(podofoDoc, podofoObj, (SkPdfNameDictionary**)out)) return true;
+  if (mapNameTreeNodeDictionary(podofoDoc, podofoObj, (SkPdfNameTreeNodeDictionary**)out)) return true;
+  if (mapNamedActionsDictionary(podofoDoc, podofoObj, (SkPdfNamedActionsDictionary**)out)) return true;
+  if (mapNumberTreeNodeDictionary(podofoDoc, podofoObj, (SkPdfNumberTreeNodeDictionary**)out)) return true;
+  if (mapObjectReferenceDictionary(podofoDoc, podofoObj, (SkPdfObjectReferenceDictionary**)out)) return true;
+  if (mapOpiVersionDictionary(podofoDoc, podofoObj, (SkPdfOpiVersionDictionary**)out)) return true;
+  if (mapOutlineDictionary(podofoDoc, podofoObj, (SkPdfOutlineDictionary**)out)) return true;
+  if (mapOutlineItemDictionary(podofoDoc, podofoObj, (SkPdfOutlineItemDictionary**)out)) return true;
+  if (mapPDF_XOutputIntentDictionary(podofoDoc, podofoObj, (SkPdfPDF_XOutputIntentDictionary**)out)) return true;
+  if (mapPSXobjectDictionary(podofoDoc, podofoObj, (SkPdfPSXobjectDictionary**)out)) return true;
+  if (mapPageLabelDictionary(podofoDoc, podofoObj, (SkPdfPageLabelDictionary**)out)) return true;
+  if (mapPageObjectActionsDictionary(podofoDoc, podofoObj, (SkPdfPageObjectActionsDictionary**)out)) return true;
+  if (mapPageObjectDictionary(podofoDoc, podofoObj, (SkPdfPageObjectDictionary**)out)) return true;
+  if (mapPagePieceDictionary(podofoDoc, podofoObj, (SkPdfPagePieceDictionary**)out)) return true;
+  if (mapPageTreeNodeDictionary(podofoDoc, podofoObj, (SkPdfPageTreeNodeDictionary**)out)) return true;
+  if (mapPopUpAnnotationDictionary(podofoDoc, podofoObj, (SkPdfPopUpAnnotationDictionary**)out)) return true;
+  if (mapPrinterMarkAnnotationDictionary(podofoDoc, podofoObj, (SkPdfPrinterMarkAnnotationDictionary**)out)) return true;
+  if (mapPrinterMarkFormDictionary(podofoDoc, podofoObj, (SkPdfPrinterMarkFormDictionary**)out)) return true;
+  if (mapRadioButtonFieldDictionary(podofoDoc, podofoObj, (SkPdfRadioButtonFieldDictionary**)out)) return true;
+  if (mapReferenceDictionary(podofoDoc, podofoObj, (SkPdfReferenceDictionary**)out)) return true;
+  if (mapRemoteGoToActionDictionary(podofoDoc, podofoObj, (SkPdfRemoteGoToActionDictionary**)out)) return true;
+  if (mapResetFormActionDictionary(podofoDoc, podofoObj, (SkPdfResetFormActionDictionary**)out)) return true;
+  if (mapResourceDictionary(podofoDoc, podofoObj, (SkPdfResourceDictionary**)out)) return true;
+  if (mapRubberStampAnnotationDictionary(podofoDoc, podofoObj, (SkPdfRubberStampAnnotationDictionary**)out)) return true;
+  if (mapSeparationDictionary(podofoDoc, podofoObj, (SkPdfSeparationDictionary**)out)) return true;
+  if (mapShadingDictionary(podofoDoc, podofoObj, (SkPdfShadingDictionary**)out)) return true;
+  if (mapSignatureDictionary(podofoDoc, podofoObj, (SkPdfSignatureDictionary**)out)) return true;
+  if (mapSoftMaskDictionary(podofoDoc, podofoObj, (SkPdfSoftMaskDictionary**)out)) return true;
+  if (mapSoftMaskImageDictionary(podofoDoc, podofoObj, (SkPdfSoftMaskImageDictionary**)out)) return true;
+  if (mapSoundActionDictionary(podofoDoc, podofoObj, (SkPdfSoundActionDictionary**)out)) return true;
+  if (mapSoundAnnotationDictionary(podofoDoc, podofoObj, (SkPdfSoundAnnotationDictionary**)out)) return true;
+  if (mapSoundObjectDictionary(podofoDoc, podofoObj, (SkPdfSoundObjectDictionary**)out)) return true;
+  if (mapSourceInformationDictionary(podofoDoc, podofoObj, (SkPdfSourceInformationDictionary**)out)) return true;
+  if (mapSquareOrCircleAnnotation(podofoDoc, podofoObj, (SkPdfSquareOrCircleAnnotation**)out)) return true;
+  if (mapStandardSecurityHandlerDictionary(podofoDoc, podofoObj, (SkPdfStandardSecurityHandlerDictionary**)out)) return true;
+  if (mapStandardStructureDictionary(podofoDoc, podofoObj, (SkPdfStandardStructureDictionary**)out)) return true;
+  if (mapStreamCommonDictionary(podofoDoc, podofoObj, (SkPdfStreamCommonDictionary**)out)) return true;
+  if (mapStructureElementAccessDictionary(podofoDoc, podofoObj, (SkPdfStructureElementAccessDictionary**)out)) return true;
+  if (mapStructureElementDictionary(podofoDoc, podofoObj, (SkPdfStructureElementDictionary**)out)) return true;
+  if (mapStructureTreeRootDictionary(podofoDoc, podofoObj, (SkPdfStructureTreeRootDictionary**)out)) return true;
+  if (mapSubmitFormActionDictionary(podofoDoc, podofoObj, (SkPdfSubmitFormActionDictionary**)out)) return true;
+  if (mapTableAttributesDictionary(podofoDoc, podofoObj, (SkPdfTableAttributesDictionary**)out)) return true;
+  if (mapTextAnnotationDictionary(podofoDoc, podofoObj, (SkPdfTextAnnotationDictionary**)out)) return true;
+  if (mapTextFieldDictionary(podofoDoc, podofoObj, (SkPdfTextFieldDictionary**)out)) return true;
+  if (mapThreadActionDictionary(podofoDoc, podofoObj, (SkPdfThreadActionDictionary**)out)) return true;
+  if (mapThreadDictionary(podofoDoc, podofoObj, (SkPdfThreadDictionary**)out)) return true;
+  if (mapTransitionDictionary(podofoDoc, podofoObj, (SkPdfTransitionDictionary**)out)) return true;
+  if (mapTransparencyGroupDictionary(podofoDoc, podofoObj, (SkPdfTransparencyGroupDictionary**)out)) return true;
+  if (mapTrapNetworkAnnotationDictionary(podofoDoc, podofoObj, (SkPdfTrapNetworkAnnotationDictionary**)out)) return true;
+  if (mapTrapNetworkAppearanceStreamDictionary(podofoDoc, podofoObj, (SkPdfTrapNetworkAppearanceStreamDictionary**)out)) return true;
+  if (mapType0FunctionDictionary(podofoDoc, podofoObj, (SkPdfType0FunctionDictionary**)out)) return true;
+  if (mapType10HalftoneDictionary(podofoDoc, podofoObj, (SkPdfType10HalftoneDictionary**)out)) return true;
+  if (mapType16HalftoneDictionary(podofoDoc, podofoObj, (SkPdfType16HalftoneDictionary**)out)) return true;
+  if (mapType1HalftoneDictionary(podofoDoc, podofoObj, (SkPdfType1HalftoneDictionary**)out)) return true;
+  if (mapType1PatternDictionary(podofoDoc, podofoObj, (SkPdfType1PatternDictionary**)out)) return true;
+  if (mapType2FunctionDictionary(podofoDoc, podofoObj, (SkPdfType2FunctionDictionary**)out)) return true;
+  if (mapType2PatternDictionary(podofoDoc, podofoObj, (SkPdfType2PatternDictionary**)out)) return true;
+  if (mapType3FunctionDictionary(podofoDoc, podofoObj, (SkPdfType3FunctionDictionary**)out)) return true;
+  if (mapType5HalftoneDictionary(podofoDoc, podofoObj, (SkPdfType5HalftoneDictionary**)out)) return true;
+  if (mapType6HalftoneDictionary(podofoDoc, podofoObj, (SkPdfType6HalftoneDictionary**)out)) return true;
+  if (mapURIActionDictionary(podofoDoc, podofoObj, (SkPdfURIActionDictionary**)out)) return true;
+  if (mapURIDictionary(podofoDoc, podofoObj, (SkPdfURIDictionary**)out)) return true;
+  if (mapURLAliasDictionary(podofoDoc, podofoObj, (SkPdfURLAliasDictionary**)out)) return true;
+  if (mapVariableTextFieldDictionary(podofoDoc, podofoObj, (SkPdfVariableTextFieldDictionary**)out)) return true;
+  if (mapViewerPreferencesDictionary(podofoDoc, podofoObj, (SkPdfViewerPreferencesDictionary**)out)) return true;
+  if (mapWebCaptureCommandDictionary(podofoDoc, podofoObj, (SkPdfWebCaptureCommandDictionary**)out)) return true;
+  if (mapWebCaptureCommandSettingsDictionary(podofoDoc, podofoObj, (SkPdfWebCaptureCommandSettingsDictionary**)out)) return true;
+  if (mapWebCaptureDictionary(podofoDoc, podofoObj, (SkPdfWebCaptureDictionary**)out)) return true;
+  if (mapWebCaptureImageSetDictionary(podofoDoc, podofoObj, (SkPdfWebCaptureImageSetDictionary**)out)) return true;
+  if (mapWebCaptureInformationDictionary(podofoDoc, podofoObj, (SkPdfWebCaptureInformationDictionary**)out)) return true;
+  if (mapWebCapturePageSetDictionary(podofoDoc, podofoObj, (SkPdfWebCapturePageSetDictionary**)out)) return true;
+  if (mapWidgetAnnotationDictionary(podofoDoc, podofoObj, (SkPdfWidgetAnnotationDictionary**)out)) return true;
+  if (mapWindowsLaunchActionDictionary(podofoDoc, podofoObj, (SkPdfWindowsLaunchActionDictionary**)out)) return true;
+  if (mapXObjectDictionary(podofoDoc, podofoObj, (SkPdfXObjectDictionary**)out)) return true;
+
+  *out = new SkPdfDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapStream(const SkPdfObject& in, SkPdfStream** out) {
+  return mapStream(*in.doc(), *in.podofo(), out);
+}
+
+bool mapStream(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStream** out) {
+  if (!isStream(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfStream(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapXObjectDictionary(const SkPdfObject& in, SkPdfXObjectDictionary** out) {
+  return mapXObjectDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapXObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfXObjectDictionary** out) {
+  if (!isXObjectDictionary(podofoDoc, podofoObj)) return false;
+
+  if (mapImageDictionary(podofoDoc, podofoObj, (SkPdfImageDictionary**)out)) return true;
+  if (mapType1FormDictionary(podofoDoc, podofoObj, (SkPdfType1FormDictionary**)out)) return true;
+
+  *out = new SkPdfXObjectDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFontDictionary(const SkPdfObject& in, SkPdfFontDictionary** out) {
+  return mapFontDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFontDictionary** out) {
+  if (!isFontDictionary(podofoDoc, podofoObj)) return false;
+
+  if (mapCIDFontDictionary(podofoDoc, podofoObj, (SkPdfCIDFontDictionary**)out)) return true;
+  if (mapType0FontDictionary(podofoDoc, podofoObj, (SkPdfType0FontDictionary**)out)) return true;
+  if (mapType1FontDictionary(podofoDoc, podofoObj, (SkPdfType1FontDictionary**)out)) return true;
+
+  *out = new SkPdfFontDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapTrueTypeFontDictionary(const SkPdfObject& in, SkPdfTrueTypeFontDictionary** out) {
+  return mapTrueTypeFontDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapTrueTypeFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTrueTypeFontDictionary** out) {
+  if (!isTrueTypeFontDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfTrueTypeFontDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapStreamCommonDictionary(const SkPdfObject& in, SkPdfStreamCommonDictionary** out) {
+  return mapStreamCommonDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapStreamCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStreamCommonDictionary** out) {
+  if (!isStreamCommonDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfStreamCommonDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapLzwdecodeAndFlatedecodeFiltersDictionary(const SkPdfObject& in, SkPdfLzwdecodeAndFlatedecodeFiltersDictionary** out) {
+  return mapLzwdecodeAndFlatedecodeFiltersDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapLzwdecodeAndFlatedecodeFiltersDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfLzwdecodeAndFlatedecodeFiltersDictionary** out) {
+  if (!isLzwdecodeAndFlatedecodeFiltersDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfLzwdecodeAndFlatedecodeFiltersDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapCcittfaxdecodeFilterDictionary(const SkPdfObject& in, SkPdfCcittfaxdecodeFilterDictionary** out) {
+  return mapCcittfaxdecodeFilterDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapCcittfaxdecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCcittfaxdecodeFilterDictionary** out) {
+  if (!isCcittfaxdecodeFilterDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfCcittfaxdecodeFilterDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapJbig2DecodeFilterDictionary(const SkPdfObject& in, SkPdfJbig2DecodeFilterDictionary** out) {
+  return mapJbig2DecodeFilterDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapJbig2DecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfJbig2DecodeFilterDictionary** out) {
+  if (!isJbig2DecodeFilterDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfJbig2DecodeFilterDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapDctdecodeFilterDictionary(const SkPdfObject& in, SkPdfDctdecodeFilterDictionary** out) {
+  return mapDctdecodeFilterDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapDctdecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDctdecodeFilterDictionary** out) {
+  if (!isDctdecodeFilterDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfDctdecodeFilterDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFileTrailerDictionary(const SkPdfObject& in, SkPdfFileTrailerDictionary** out) {
+  return mapFileTrailerDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFileTrailerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFileTrailerDictionary** out) {
+  if (!isFileTrailerDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFileTrailerDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapEncryptionCommonDictionary(const SkPdfObject& in, SkPdfEncryptionCommonDictionary** out) {
+  return mapEncryptionCommonDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapEncryptionCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEncryptionCommonDictionary** out) {
+  if (!isEncryptionCommonDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfEncryptionCommonDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapStandardSecurityHandlerDictionary(const SkPdfObject& in, SkPdfStandardSecurityHandlerDictionary** out) {
+  return mapStandardSecurityHandlerDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapStandardSecurityHandlerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStandardSecurityHandlerDictionary** out) {
+  if (!isStandardSecurityHandlerDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfStandardSecurityHandlerDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapCatalogDictionary(const SkPdfObject& in, SkPdfCatalogDictionary** out) {
+  return mapCatalogDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapCatalogDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCatalogDictionary** out) {
+  if (!isCatalogDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfCatalogDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapPageTreeNodeDictionary(const SkPdfObject& in, SkPdfPageTreeNodeDictionary** out) {
+  return mapPageTreeNodeDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapPageTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPageTreeNodeDictionary** out) {
+  if (!isPageTreeNodeDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfPageTreeNodeDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapPageObjectDictionary(const SkPdfObject& in, SkPdfPageObjectDictionary** out) {
+  return mapPageObjectDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapPageObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPageObjectDictionary** out) {
+  if (!isPageObjectDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfPageObjectDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapNameDictionary(const SkPdfObject& in, SkPdfNameDictionary** out) {
+  return mapNameDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapNameDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNameDictionary** out) {
+  if (!isNameDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfNameDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapResourceDictionary(const SkPdfObject& in, SkPdfResourceDictionary** out) {
+  return mapResourceDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapResourceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfResourceDictionary** out) {
+  if (!isResourceDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfResourceDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapNameTreeNodeDictionary(const SkPdfObject& in, SkPdfNameTreeNodeDictionary** out) {
+  return mapNameTreeNodeDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapNameTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNameTreeNodeDictionary** out) {
+  if (!isNameTreeNodeDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfNameTreeNodeDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapNumberTreeNodeDictionary(const SkPdfObject& in, SkPdfNumberTreeNodeDictionary** out) {
+  return mapNumberTreeNodeDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapNumberTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNumberTreeNodeDictionary** out) {
+  if (!isNumberTreeNodeDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfNumberTreeNodeDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFunctionCommonDictionary(const SkPdfObject& in, SkPdfFunctionCommonDictionary** out) {
+  return mapFunctionCommonDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFunctionCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFunctionCommonDictionary** out) {
+  if (!isFunctionCommonDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFunctionCommonDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType0FunctionDictionary(const SkPdfObject& in, SkPdfType0FunctionDictionary** out) {
+  return mapType0FunctionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType0FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType0FunctionDictionary** out) {
+  if (!isType0FunctionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType0FunctionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType2FunctionDictionary(const SkPdfObject& in, SkPdfType2FunctionDictionary** out) {
+  return mapType2FunctionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType2FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType2FunctionDictionary** out) {
+  if (!isType2FunctionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType2FunctionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType3FunctionDictionary(const SkPdfObject& in, SkPdfType3FunctionDictionary** out) {
+  return mapType3FunctionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType3FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType3FunctionDictionary** out) {
+  if (!isType3FunctionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType3FunctionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFileSpecificationDictionary(const SkPdfObject& in, SkPdfFileSpecificationDictionary** out) {
+  return mapFileSpecificationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFileSpecificationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFileSpecificationDictionary** out) {
+  if (!isFileSpecificationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFileSpecificationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapEmbeddedFileStreamDictionary(const SkPdfObject& in, SkPdfEmbeddedFileStreamDictionary** out) {
+  return mapEmbeddedFileStreamDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapEmbeddedFileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEmbeddedFileStreamDictionary** out) {
+  if (!isEmbeddedFileStreamDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfEmbeddedFileStreamDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapEmbeddedFileParameterDictionary(const SkPdfObject& in, SkPdfEmbeddedFileParameterDictionary** out) {
+  return mapEmbeddedFileParameterDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapEmbeddedFileParameterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEmbeddedFileParameterDictionary** out) {
+  if (!isEmbeddedFileParameterDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfEmbeddedFileParameterDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapMacOsFileInformationDictionary(const SkPdfObject& in, SkPdfMacOsFileInformationDictionary** out) {
+  return mapMacOsFileInformationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapMacOsFileInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMacOsFileInformationDictionary** out) {
+  if (!isMacOsFileInformationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfMacOsFileInformationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapGraphicsStateDictionary(const SkPdfObject& in, SkPdfGraphicsStateDictionary** out) {
+  return mapGraphicsStateDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapGraphicsStateDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfGraphicsStateDictionary** out) {
+  if (!isGraphicsStateDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfGraphicsStateDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapCalgrayColorSpaceDictionary(const SkPdfObject& in, SkPdfCalgrayColorSpaceDictionary** out) {
+  return mapCalgrayColorSpaceDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapCalgrayColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCalgrayColorSpaceDictionary** out) {
+  if (!isCalgrayColorSpaceDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfCalgrayColorSpaceDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapCalrgbColorSpaceDictionary(const SkPdfObject& in, SkPdfCalrgbColorSpaceDictionary** out) {
+  return mapCalrgbColorSpaceDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapCalrgbColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCalrgbColorSpaceDictionary** out) {
+  if (!isCalrgbColorSpaceDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfCalrgbColorSpaceDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapLabColorSpaceDictionary(const SkPdfObject& in, SkPdfLabColorSpaceDictionary** out) {
+  return mapLabColorSpaceDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapLabColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfLabColorSpaceDictionary** out) {
+  if (!isLabColorSpaceDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfLabColorSpaceDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapIccProfileStreamDictionary(const SkPdfObject& in, SkPdfIccProfileStreamDictionary** out) {
+  return mapIccProfileStreamDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapIccProfileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfIccProfileStreamDictionary** out) {
+  if (!isIccProfileStreamDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfIccProfileStreamDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapDeviceNColorSpaceDictionary(const SkPdfObject& in, SkPdfDeviceNColorSpaceDictionary** out) {
+  return mapDeviceNColorSpaceDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapDeviceNColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDeviceNColorSpaceDictionary** out) {
+  if (!isDeviceNColorSpaceDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfDeviceNColorSpaceDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType1PatternDictionary(const SkPdfObject& in, SkPdfType1PatternDictionary** out) {
+  return mapType1PatternDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType1PatternDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1PatternDictionary** out) {
+  if (!isType1PatternDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType1PatternDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType2PatternDictionary(const SkPdfObject& in, SkPdfType2PatternDictionary** out) {
+  return mapType2PatternDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType2PatternDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType2PatternDictionary** out) {
+  if (!isType2PatternDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType2PatternDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapShadingDictionary(const SkPdfObject& in, SkPdfShadingDictionary** out) {
+  return mapShadingDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfShadingDictionary** out) {
+  if (!isShadingDictionary(podofoDoc, podofoObj)) return false;
+
+  if (mapType1ShadingDictionary(podofoDoc, podofoObj, (SkPdfType1ShadingDictionary**)out)) return true;
+  if (mapType2ShadingDictionary(podofoDoc, podofoObj, (SkPdfType2ShadingDictionary**)out)) return true;
+  if (mapType3ShadingDictionary(podofoDoc, podofoObj, (SkPdfType3ShadingDictionary**)out)) return true;
+  if (mapType4ShadingDictionary(podofoDoc, podofoObj, (SkPdfType4ShadingDictionary**)out)) return true;
+  if (mapType5ShadingDictionary(podofoDoc, podofoObj, (SkPdfType5ShadingDictionary**)out)) return true;
+  if (mapType6ShadingDictionary(podofoDoc, podofoObj, (SkPdfType6ShadingDictionary**)out)) return true;
+
+  *out = new SkPdfShadingDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType1ShadingDictionary(const SkPdfObject& in, SkPdfType1ShadingDictionary** out) {
+  return mapType1ShadingDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType1ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1ShadingDictionary** out) {
+  if (!isType1ShadingDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType1ShadingDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType2ShadingDictionary(const SkPdfObject& in, SkPdfType2ShadingDictionary** out) {
+  return mapType2ShadingDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType2ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType2ShadingDictionary** out) {
+  if (!isType2ShadingDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType2ShadingDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType3ShadingDictionary(const SkPdfObject& in, SkPdfType3ShadingDictionary** out) {
+  return mapType3ShadingDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType3ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType3ShadingDictionary** out) {
+  if (!isType3ShadingDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType3ShadingDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType4ShadingDictionary(const SkPdfObject& in, SkPdfType4ShadingDictionary** out) {
+  return mapType4ShadingDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType4ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType4ShadingDictionary** out) {
+  if (!isType4ShadingDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType4ShadingDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType5ShadingDictionary(const SkPdfObject& in, SkPdfType5ShadingDictionary** out) {
+  return mapType5ShadingDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType5ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType5ShadingDictionary** out) {
+  if (!isType5ShadingDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType5ShadingDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType6ShadingDictionary(const SkPdfObject& in, SkPdfType6ShadingDictionary** out) {
+  return mapType6ShadingDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType6ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType6ShadingDictionary** out) {
+  if (!isType6ShadingDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType6ShadingDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapImageDictionary(const SkPdfObject& in, SkPdfImageDictionary** out) {
+  return mapImageDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfImageDictionary** out) {
+  if (!isImageDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfImageDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapAlternateImageDictionary(const SkPdfObject& in, SkPdfAlternateImageDictionary** out) {
+  return mapAlternateImageDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapAlternateImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAlternateImageDictionary** out) {
+  if (!isAlternateImageDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfAlternateImageDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType1FormDictionary(const SkPdfObject& in, SkPdfType1FormDictionary** out) {
+  return mapType1FormDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType1FormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1FormDictionary** out) {
+  if (!isType1FormDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType1FormDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapGroupAttributesDictionary(const SkPdfObject& in, SkPdfGroupAttributesDictionary** out) {
+  return mapGroupAttributesDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapGroupAttributesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfGroupAttributesDictionary** out) {
+  if (!isGroupAttributesDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfGroupAttributesDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapReferenceDictionary(const SkPdfObject& in, SkPdfReferenceDictionary** out) {
+  return mapReferenceDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfReferenceDictionary** out) {
+  if (!isReferenceDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfReferenceDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapPSXobjectDictionary(const SkPdfObject& in, SkPdfPSXobjectDictionary** out) {
+  return mapPSXobjectDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapPSXobjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPSXobjectDictionary** out) {
+  if (!isPSXobjectDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfPSXobjectDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType1FontDictionary(const SkPdfObject& in, SkPdfType1FontDictionary** out) {
+  return mapType1FontDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType1FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1FontDictionary** out) {
+  if (!isType1FontDictionary(podofoDoc, podofoObj)) return false;
+
+  if (mapMultiMasterFontDictionary(podofoDoc, podofoObj, (SkPdfMultiMasterFontDictionary**)out)) return true;
+  if (mapTrueTypeFontDictionary(podofoDoc, podofoObj, (SkPdfTrueTypeFontDictionary**)out)) return true;
+  if (mapType3FontDictionary(podofoDoc, podofoObj, (SkPdfType3FontDictionary**)out)) return true;
+
+  *out = new SkPdfType1FontDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType3FontDictionary(const SkPdfObject& in, SkPdfType3FontDictionary** out) {
+  return mapType3FontDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType3FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType3FontDictionary** out) {
+  if (!isType3FontDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType3FontDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapEncodingDictionary(const SkPdfObject& in, SkPdfEncodingDictionary** out) {
+  return mapEncodingDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapEncodingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEncodingDictionary** out) {
+  if (!isEncodingDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfEncodingDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapCIDSystemInfoDictionary(const SkPdfObject& in, SkPdfCIDSystemInfoDictionary** out) {
+  return mapCIDSystemInfoDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapCIDSystemInfoDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCIDSystemInfoDictionary** out) {
+  if (!isCIDSystemInfoDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfCIDSystemInfoDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapCIDFontDictionary(const SkPdfObject& in, SkPdfCIDFontDictionary** out) {
+  return mapCIDFontDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapCIDFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCIDFontDictionary** out) {
+  if (!isCIDFontDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfCIDFontDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapCMapDictionary(const SkPdfObject& in, SkPdfCMapDictionary** out) {
+  return mapCMapDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapCMapDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCMapDictionary** out) {
+  if (!isCMapDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfCMapDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType0FontDictionary(const SkPdfObject& in, SkPdfType0FontDictionary** out) {
+  return mapType0FontDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType0FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType0FontDictionary** out) {
+  if (!isType0FontDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType0FontDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFontDescriptorDictionary(const SkPdfObject& in, SkPdfFontDescriptorDictionary** out) {
+  return mapFontDescriptorDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFontDescriptorDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFontDescriptorDictionary** out) {
+  if (!isFontDescriptorDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFontDescriptorDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapCIDFontDescriptorDictionary(const SkPdfObject& in, SkPdfCIDFontDescriptorDictionary** out) {
+  return mapCIDFontDescriptorDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapCIDFontDescriptorDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCIDFontDescriptorDictionary** out) {
+  if (!isCIDFontDescriptorDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfCIDFontDescriptorDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapEmbeddedFontStreamDictionary(const SkPdfObject& in, SkPdfEmbeddedFontStreamDictionary** out) {
+  return mapEmbeddedFontStreamDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapEmbeddedFontStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEmbeddedFontStreamDictionary** out) {
+  if (!isEmbeddedFontStreamDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfEmbeddedFontStreamDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType1HalftoneDictionary(const SkPdfObject& in, SkPdfType1HalftoneDictionary** out) {
+  return mapType1HalftoneDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType1HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1HalftoneDictionary** out) {
+  if (!isType1HalftoneDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType1HalftoneDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType6HalftoneDictionary(const SkPdfObject& in, SkPdfType6HalftoneDictionary** out) {
+  return mapType6HalftoneDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType6HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType6HalftoneDictionary** out) {
+  if (!isType6HalftoneDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType6HalftoneDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType10HalftoneDictionary(const SkPdfObject& in, SkPdfType10HalftoneDictionary** out) {
+  return mapType10HalftoneDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType10HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType10HalftoneDictionary** out) {
+  if (!isType10HalftoneDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType10HalftoneDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType16HalftoneDictionary(const SkPdfObject& in, SkPdfType16HalftoneDictionary** out) {
+  return mapType16HalftoneDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType16HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType16HalftoneDictionary** out) {
+  if (!isType16HalftoneDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType16HalftoneDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapType5HalftoneDictionary(const SkPdfObject& in, SkPdfType5HalftoneDictionary** out) {
+  return mapType5HalftoneDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapType5HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType5HalftoneDictionary** out) {
+  if (!isType5HalftoneDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfType5HalftoneDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapSoftMaskDictionary(const SkPdfObject& in, SkPdfSoftMaskDictionary** out) {
+  return mapSoftMaskDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapSoftMaskDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoftMaskDictionary** out) {
+  if (!isSoftMaskDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfSoftMaskDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapSoftMaskImageDictionary(const SkPdfObject& in, SkPdfSoftMaskImageDictionary** out) {
+  return mapSoftMaskImageDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapSoftMaskImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoftMaskImageDictionary** out) {
+  if (!isSoftMaskImageDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfSoftMaskImageDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapTransparencyGroupDictionary(const SkPdfObject& in, SkPdfTransparencyGroupDictionary** out) {
+  return mapTransparencyGroupDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapTransparencyGroupDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTransparencyGroupDictionary** out) {
+  if (!isTransparencyGroupDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfTransparencyGroupDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapViewerPreferencesDictionary(const SkPdfObject& in, SkPdfViewerPreferencesDictionary** out) {
+  return mapViewerPreferencesDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapViewerPreferencesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfViewerPreferencesDictionary** out) {
+  if (!isViewerPreferencesDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfViewerPreferencesDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapOutlineDictionary(const SkPdfObject& in, SkPdfOutlineDictionary** out) {
+  return mapOutlineDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapOutlineDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfOutlineDictionary** out) {
+  if (!isOutlineDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfOutlineDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapOutlineItemDictionary(const SkPdfObject& in, SkPdfOutlineItemDictionary** out) {
+  return mapOutlineItemDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapOutlineItemDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfOutlineItemDictionary** out) {
+  if (!isOutlineItemDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfOutlineItemDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapPageLabelDictionary(const SkPdfObject& in, SkPdfPageLabelDictionary** out) {
+  return mapPageLabelDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapPageLabelDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPageLabelDictionary** out) {
+  if (!isPageLabelDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfPageLabelDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapThreadDictionary(const SkPdfObject& in, SkPdfThreadDictionary** out) {
+  return mapThreadDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapThreadDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfThreadDictionary** out) {
+  if (!isThreadDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfThreadDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapBeadDictionary(const SkPdfObject& in, SkPdfBeadDictionary** out) {
+  return mapBeadDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapBeadDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBeadDictionary** out) {
+  if (!isBeadDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfBeadDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapTransitionDictionary(const SkPdfObject& in, SkPdfTransitionDictionary** out) {
+  return mapTransitionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapTransitionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTransitionDictionary** out) {
+  if (!isTransitionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfTransitionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapAnnotationDictionary(const SkPdfObject& in, SkPdfAnnotationDictionary** out) {
+  return mapAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAnnotationDictionary** out) {
+  if (!isAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapBorderStyleDictionary(const SkPdfObject& in, SkPdfBorderStyleDictionary** out) {
+  return mapBorderStyleDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapBorderStyleDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBorderStyleDictionary** out) {
+  if (!isBorderStyleDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfBorderStyleDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapAppearanceDictionary(const SkPdfObject& in, SkPdfAppearanceDictionary** out) {
+  return mapAppearanceDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapAppearanceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAppearanceDictionary** out) {
+  if (!isAppearanceDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfAppearanceDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapTextAnnotationDictionary(const SkPdfObject& in, SkPdfTextAnnotationDictionary** out) {
+  return mapTextAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapTextAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTextAnnotationDictionary** out) {
+  if (!isTextAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfTextAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapALinkAnnotationDictionary(const SkPdfObject& in, SkPdfALinkAnnotationDictionary** out) {
+  return mapALinkAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapALinkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfALinkAnnotationDictionary** out) {
+  if (!isALinkAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfALinkAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFreeTextAnnotationDictionary(const SkPdfObject& in, SkPdfFreeTextAnnotationDictionary** out) {
+  return mapFreeTextAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFreeTextAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFreeTextAnnotationDictionary** out) {
+  if (!isFreeTextAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFreeTextAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapLineAnnotationDictionary(const SkPdfObject& in, SkPdfLineAnnotationDictionary** out) {
+  return mapLineAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapLineAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfLineAnnotationDictionary** out) {
+  if (!isLineAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfLineAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapSquareOrCircleAnnotation(const SkPdfObject& in, SkPdfSquareOrCircleAnnotation** out) {
+  return mapSquareOrCircleAnnotation(*in.doc(), *in.podofo(), out);
+}
+
+bool mapSquareOrCircleAnnotation(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSquareOrCircleAnnotation** out) {
+  if (!isSquareOrCircleAnnotation(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfSquareOrCircleAnnotation(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapMarkupAnnotationsDictionary(const SkPdfObject& in, SkPdfMarkupAnnotationsDictionary** out) {
+  return mapMarkupAnnotationsDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapMarkupAnnotationsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMarkupAnnotationsDictionary** out) {
+  if (!isMarkupAnnotationsDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfMarkupAnnotationsDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapRubberStampAnnotationDictionary(const SkPdfObject& in, SkPdfRubberStampAnnotationDictionary** out) {
+  return mapRubberStampAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapRubberStampAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfRubberStampAnnotationDictionary** out) {
+  if (!isRubberStampAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfRubberStampAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapInkAnnotationDictionary(const SkPdfObject& in, SkPdfInkAnnotationDictionary** out) {
+  return mapInkAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapInkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfInkAnnotationDictionary** out) {
+  if (!isInkAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfInkAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapPopUpAnnotationDictionary(const SkPdfObject& in, SkPdfPopUpAnnotationDictionary** out) {
+  return mapPopUpAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapPopUpAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPopUpAnnotationDictionary** out) {
+  if (!isPopUpAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfPopUpAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFileAttachmentAnnotationDictionary(const SkPdfObject& in, SkPdfFileAttachmentAnnotationDictionary** out) {
+  return mapFileAttachmentAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFileAttachmentAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFileAttachmentAnnotationDictionary** out) {
+  if (!isFileAttachmentAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFileAttachmentAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapSoundAnnotationDictionary(const SkPdfObject& in, SkPdfSoundAnnotationDictionary** out) {
+  return mapSoundAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapSoundAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoundAnnotationDictionary** out) {
+  if (!isSoundAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfSoundAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapMovieAnnotationDictionary(const SkPdfObject& in, SkPdfMovieAnnotationDictionary** out) {
+  return mapMovieAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapMovieAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMovieAnnotationDictionary** out) {
+  if (!isMovieAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfMovieAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapWidgetAnnotationDictionary(const SkPdfObject& in, SkPdfWidgetAnnotationDictionary** out) {
+  return mapWidgetAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapWidgetAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWidgetAnnotationDictionary** out) {
+  if (!isWidgetAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfWidgetAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapActionDictionary(const SkPdfObject& in, SkPdfActionDictionary** out) {
+  return mapActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfActionDictionary** out) {
+  if (!isActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapAnnotationActionsDictionary(const SkPdfObject& in, SkPdfAnnotationActionsDictionary** out) {
+  return mapAnnotationActionsDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapAnnotationActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAnnotationActionsDictionary** out) {
+  if (!isAnnotationActionsDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfAnnotationActionsDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapPageObjectActionsDictionary(const SkPdfObject& in, SkPdfPageObjectActionsDictionary** out) {
+  return mapPageObjectActionsDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapPageObjectActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPageObjectActionsDictionary** out) {
+  if (!isPageObjectActionsDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfPageObjectActionsDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFormFieldActionsDictionary(const SkPdfObject& in, SkPdfFormFieldActionsDictionary** out) {
+  return mapFormFieldActionsDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFormFieldActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFormFieldActionsDictionary** out) {
+  if (!isFormFieldActionsDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFormFieldActionsDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapDocumentCatalogActionsDictionary(const SkPdfObject& in, SkPdfDocumentCatalogActionsDictionary** out) {
+  return mapDocumentCatalogActionsDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapDocumentCatalogActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDocumentCatalogActionsDictionary** out) {
+  if (!isDocumentCatalogActionsDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfDocumentCatalogActionsDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapGoToActionDictionary(const SkPdfObject& in, SkPdfGoToActionDictionary** out) {
+  return mapGoToActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapGoToActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfGoToActionDictionary** out) {
+  if (!isGoToActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfGoToActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapRemoteGoToActionDictionary(const SkPdfObject& in, SkPdfRemoteGoToActionDictionary** out) {
+  return mapRemoteGoToActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapRemoteGoToActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfRemoteGoToActionDictionary** out) {
+  if (!isRemoteGoToActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfRemoteGoToActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapLaunchActionDictionary(const SkPdfObject& in, SkPdfLaunchActionDictionary** out) {
+  return mapLaunchActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapLaunchActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfLaunchActionDictionary** out) {
+  if (!isLaunchActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfLaunchActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapWindowsLaunchActionDictionary(const SkPdfObject& in, SkPdfWindowsLaunchActionDictionary** out) {
+  return mapWindowsLaunchActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapWindowsLaunchActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWindowsLaunchActionDictionary** out) {
+  if (!isWindowsLaunchActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfWindowsLaunchActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapThreadActionDictionary(const SkPdfObject& in, SkPdfThreadActionDictionary** out) {
+  return mapThreadActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapThreadActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfThreadActionDictionary** out) {
+  if (!isThreadActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfThreadActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapURIActionDictionary(const SkPdfObject& in, SkPdfURIActionDictionary** out) {
+  return mapURIActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapURIActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfURIActionDictionary** out) {
+  if (!isURIActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfURIActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapURIDictionary(const SkPdfObject& in, SkPdfURIDictionary** out) {
+  return mapURIDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapURIDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfURIDictionary** out) {
+  if (!isURIDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfURIDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapSoundActionDictionary(const SkPdfObject& in, SkPdfSoundActionDictionary** out) {
+  return mapSoundActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapSoundActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoundActionDictionary** out) {
+  if (!isSoundActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfSoundActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapMovieActionDictionary(const SkPdfObject& in, SkPdfMovieActionDictionary** out) {
+  return mapMovieActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapMovieActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMovieActionDictionary** out) {
+  if (!isMovieActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfMovieActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapHideActionDictionary(const SkPdfObject& in, SkPdfHideActionDictionary** out) {
+  return mapHideActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapHideActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfHideActionDictionary** out) {
+  if (!isHideActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfHideActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapNamedActionsDictionary(const SkPdfObject& in, SkPdfNamedActionsDictionary** out) {
+  return mapNamedActionsDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapNamedActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNamedActionsDictionary** out) {
+  if (!isNamedActionsDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfNamedActionsDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapInteractiveFormDictionary(const SkPdfObject& in, SkPdfInteractiveFormDictionary** out) {
+  return mapInteractiveFormDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapInteractiveFormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfInteractiveFormDictionary** out) {
+  if (!isInteractiveFormDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfInteractiveFormDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFieldDictionary(const SkPdfObject& in, SkPdfFieldDictionary** out) {
+  return mapFieldDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFieldDictionary** out) {
+  if (!isFieldDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFieldDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapVariableTextFieldDictionary(const SkPdfObject& in, SkPdfVariableTextFieldDictionary** out) {
+  return mapVariableTextFieldDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapVariableTextFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfVariableTextFieldDictionary** out) {
+  if (!isVariableTextFieldDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfVariableTextFieldDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapAppearanceCharacteristicsDictionary(const SkPdfObject& in, SkPdfAppearanceCharacteristicsDictionary** out) {
+  return mapAppearanceCharacteristicsDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapAppearanceCharacteristicsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAppearanceCharacteristicsDictionary** out) {
+  if (!isAppearanceCharacteristicsDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfAppearanceCharacteristicsDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapCheckboxFieldDictionary(const SkPdfObject& in, SkPdfCheckboxFieldDictionary** out) {
+  return mapCheckboxFieldDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapCheckboxFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCheckboxFieldDictionary** out) {
+  if (!isCheckboxFieldDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfCheckboxFieldDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapRadioButtonFieldDictionary(const SkPdfObject& in, SkPdfRadioButtonFieldDictionary** out) {
+  return mapRadioButtonFieldDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapRadioButtonFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfRadioButtonFieldDictionary** out) {
+  if (!isRadioButtonFieldDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfRadioButtonFieldDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapTextFieldDictionary(const SkPdfObject& in, SkPdfTextFieldDictionary** out) {
+  return mapTextFieldDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapTextFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTextFieldDictionary** out) {
+  if (!isTextFieldDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfTextFieldDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapChoiceFieldDictionary(const SkPdfObject& in, SkPdfChoiceFieldDictionary** out) {
+  return mapChoiceFieldDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapChoiceFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfChoiceFieldDictionary** out) {
+  if (!isChoiceFieldDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfChoiceFieldDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapSignatureDictionary(const SkPdfObject& in, SkPdfSignatureDictionary** out) {
+  return mapSignatureDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapSignatureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSignatureDictionary** out) {
+  if (!isSignatureDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfSignatureDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapSubmitFormActionDictionary(const SkPdfObject& in, SkPdfSubmitFormActionDictionary** out) {
+  return mapSubmitFormActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapSubmitFormActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSubmitFormActionDictionary** out) {
+  if (!isSubmitFormActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfSubmitFormActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapResetFormActionDictionary(const SkPdfObject& in, SkPdfResetFormActionDictionary** out) {
+  return mapResetFormActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapResetFormActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfResetFormActionDictionary** out) {
+  if (!isResetFormActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfResetFormActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapImportDataActionDictionary(const SkPdfObject& in, SkPdfImportDataActionDictionary** out) {
+  return mapImportDataActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapImportDataActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfImportDataActionDictionary** out) {
+  if (!isImportDataActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfImportDataActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapJavascriptActionDictionary(const SkPdfObject& in, SkPdfJavascriptActionDictionary** out) {
+  return mapJavascriptActionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapJavascriptActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfJavascriptActionDictionary** out) {
+  if (!isJavascriptActionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfJavascriptActionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFDFTrailerDictionary(const SkPdfObject& in, SkPdfFDFTrailerDictionary** out) {
+  return mapFDFTrailerDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFDFTrailerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFTrailerDictionary** out) {
+  if (!isFDFTrailerDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFDFTrailerDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFDFCatalogDictionary(const SkPdfObject& in, SkPdfFDFCatalogDictionary** out) {
+  return mapFDFCatalogDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFDFCatalogDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFCatalogDictionary** out) {
+  if (!isFDFCatalogDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFDFCatalogDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFDFDictionary(const SkPdfObject& in, SkPdfFDFDictionary** out) {
+  return mapFDFDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFDFDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFDictionary** out) {
+  if (!isFDFDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFDFDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapEncryptedEmbeddedFileStreamDictionary(const SkPdfObject& in, SkPdfEncryptedEmbeddedFileStreamDictionary** out) {
+  return mapEncryptedEmbeddedFileStreamDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapEncryptedEmbeddedFileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEncryptedEmbeddedFileStreamDictionary** out) {
+  if (!isEncryptedEmbeddedFileStreamDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfEncryptedEmbeddedFileStreamDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapJavascriptDictionary(const SkPdfObject& in, SkPdfJavascriptDictionary** out) {
+  return mapJavascriptDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapJavascriptDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfJavascriptDictionary** out) {
+  if (!isJavascriptDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfJavascriptDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFDFFieldDictionary(const SkPdfObject& in, SkPdfFDFFieldDictionary** out) {
+  return mapFDFFieldDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFDFFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFFieldDictionary** out) {
+  if (!isFDFFieldDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFDFFieldDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapIconFitDictionary(const SkPdfObject& in, SkPdfIconFitDictionary** out) {
+  return mapIconFitDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapIconFitDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfIconFitDictionary** out) {
+  if (!isIconFitDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfIconFitDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFDFPageDictionary(const SkPdfObject& in, SkPdfFDFPageDictionary** out) {
+  return mapFDFPageDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFDFPageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFPageDictionary** out) {
+  if (!isFDFPageDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFDFPageDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFDFTemplateDictionary(const SkPdfObject& in, SkPdfFDFTemplateDictionary** out) {
+  return mapFDFTemplateDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFDFTemplateDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFTemplateDictionary** out) {
+  if (!isFDFTemplateDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFDFTemplateDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFDFNamedPageReferenceDictionary(const SkPdfObject& in, SkPdfFDFNamedPageReferenceDictionary** out) {
+  return mapFDFNamedPageReferenceDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFDFNamedPageReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFNamedPageReferenceDictionary** out) {
+  if (!isFDFNamedPageReferenceDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFDFNamedPageReferenceDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapFDFFileAnnotationDictionary(const SkPdfObject& in, SkPdfFDFFileAnnotationDictionary** out) {
+  return mapFDFFileAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapFDFFileAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFFileAnnotationDictionary** out) {
+  if (!isFDFFileAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfFDFFileAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapSoundObjectDictionary(const SkPdfObject& in, SkPdfSoundObjectDictionary** out) {
+  return mapSoundObjectDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapSoundObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoundObjectDictionary** out) {
+  if (!isSoundObjectDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfSoundObjectDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapMovieDictionary(const SkPdfObject& in, SkPdfMovieDictionary** out) {
+  return mapMovieDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapMovieDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMovieDictionary** out) {
+  if (!isMovieDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfMovieDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapMovieActivationDictionary(const SkPdfObject& in, SkPdfMovieActivationDictionary** out) {
+  return mapMovieActivationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapMovieActivationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMovieActivationDictionary** out) {
+  if (!isMovieActivationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfMovieActivationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapDocumentInformationDictionary(const SkPdfObject& in, SkPdfDocumentInformationDictionary** out) {
+  return mapDocumentInformationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapDocumentInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDocumentInformationDictionary** out) {
+  if (!isDocumentInformationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfDocumentInformationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapMetadataStreamDictionary(const SkPdfObject& in, SkPdfMetadataStreamDictionary** out) {
+  return mapMetadataStreamDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapMetadataStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMetadataStreamDictionary** out) {
+  if (!isMetadataStreamDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfMetadataStreamDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapComponentsWithMetadataDictionary(const SkPdfObject& in, SkPdfComponentsWithMetadataDictionary** out) {
+  return mapComponentsWithMetadataDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapComponentsWithMetadataDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfComponentsWithMetadataDictionary** out) {
+  if (!isComponentsWithMetadataDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfComponentsWithMetadataDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapPagePieceDictionary(const SkPdfObject& in, SkPdfPagePieceDictionary** out) {
+  return mapPagePieceDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapPagePieceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPagePieceDictionary** out) {
+  if (!isPagePieceDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfPagePieceDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapApplicationDataDictionary(const SkPdfObject& in, SkPdfApplicationDataDictionary** out) {
+  return mapApplicationDataDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapApplicationDataDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfApplicationDataDictionary** out) {
+  if (!isApplicationDataDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfApplicationDataDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapStructureTreeRootDictionary(const SkPdfObject& in, SkPdfStructureTreeRootDictionary** out) {
+  return mapStructureTreeRootDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapStructureTreeRootDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStructureTreeRootDictionary** out) {
+  if (!isStructureTreeRootDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfStructureTreeRootDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapStructureElementDictionary(const SkPdfObject& in, SkPdfStructureElementDictionary** out) {
+  return mapStructureElementDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapStructureElementDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStructureElementDictionary** out) {
+  if (!isStructureElementDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfStructureElementDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapMarkedContentReferenceDictionary(const SkPdfObject& in, SkPdfMarkedContentReferenceDictionary** out) {
+  return mapMarkedContentReferenceDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapMarkedContentReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMarkedContentReferenceDictionary** out) {
+  if (!isMarkedContentReferenceDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfMarkedContentReferenceDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapObjectReferenceDictionary(const SkPdfObject& in, SkPdfObjectReferenceDictionary** out) {
+  return mapObjectReferenceDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapObjectReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfObjectReferenceDictionary** out) {
+  if (!isObjectReferenceDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfObjectReferenceDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapStructureElementAccessDictionary(const SkPdfObject& in, SkPdfStructureElementAccessDictionary** out) {
+  return mapStructureElementAccessDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapStructureElementAccessDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStructureElementAccessDictionary** out) {
+  if (!isStructureElementAccessDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfStructureElementAccessDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapAttributeObjectDictionary(const SkPdfObject& in, SkPdfAttributeObjectDictionary** out) {
+  return mapAttributeObjectDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapAttributeObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAttributeObjectDictionary** out) {
+  if (!isAttributeObjectDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfAttributeObjectDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapMarkInformationDictionary(const SkPdfObject& in, SkPdfMarkInformationDictionary** out) {
+  return mapMarkInformationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapMarkInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMarkInformationDictionary** out) {
+  if (!isMarkInformationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfMarkInformationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapArtifactsDictionary(const SkPdfObject& in, SkPdfArtifactsDictionary** out) {
+  return mapArtifactsDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapArtifactsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfArtifactsDictionary** out) {
+  if (!isArtifactsDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfArtifactsDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapStandardStructureDictionary(const SkPdfObject& in, SkPdfStandardStructureDictionary** out) {
+  return mapStandardStructureDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapStandardStructureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStandardStructureDictionary** out) {
+  if (!isStandardStructureDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfStandardStructureDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapBlockLevelStructureElementsDictionary(const SkPdfObject& in, SkPdfBlockLevelStructureElementsDictionary** out) {
+  return mapBlockLevelStructureElementsDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapBlockLevelStructureElementsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBlockLevelStructureElementsDictionary** out) {
+  if (!isBlockLevelStructureElementsDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfBlockLevelStructureElementsDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapInlineLevelStructureElementsDictionary(const SkPdfObject& in, SkPdfInlineLevelStructureElementsDictionary** out) {
+  return mapInlineLevelStructureElementsDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapInlineLevelStructureElementsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfInlineLevelStructureElementsDictionary** out) {
+  if (!isInlineLevelStructureElementsDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfInlineLevelStructureElementsDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapListAttributeDictionary(const SkPdfObject& in, SkPdfListAttributeDictionary** out) {
+  return mapListAttributeDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapListAttributeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfListAttributeDictionary** out) {
+  if (!isListAttributeDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfListAttributeDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapTableAttributesDictionary(const SkPdfObject& in, SkPdfTableAttributesDictionary** out) {
+  return mapTableAttributesDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapTableAttributesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTableAttributesDictionary** out) {
+  if (!isTableAttributesDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfTableAttributesDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapWebCaptureInformationDictionary(const SkPdfObject& in, SkPdfWebCaptureInformationDictionary** out) {
+  return mapWebCaptureInformationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapWebCaptureInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureInformationDictionary** out) {
+  if (!isWebCaptureInformationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfWebCaptureInformationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapWebCaptureDictionary(const SkPdfObject& in, SkPdfWebCaptureDictionary** out) {
+  return mapWebCaptureDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapWebCaptureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureDictionary** out) {
+  if (!isWebCaptureDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfWebCaptureDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapWebCapturePageSetDictionary(const SkPdfObject& in, SkPdfWebCapturePageSetDictionary** out) {
+  return mapWebCapturePageSetDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapWebCapturePageSetDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCapturePageSetDictionary** out) {
+  if (!isWebCapturePageSetDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfWebCapturePageSetDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapWebCaptureImageSetDictionary(const SkPdfObject& in, SkPdfWebCaptureImageSetDictionary** out) {
+  return mapWebCaptureImageSetDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapWebCaptureImageSetDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureImageSetDictionary** out) {
+  if (!isWebCaptureImageSetDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfWebCaptureImageSetDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapSourceInformationDictionary(const SkPdfObject& in, SkPdfSourceInformationDictionary** out) {
+  return mapSourceInformationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapSourceInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSourceInformationDictionary** out) {
+  if (!isSourceInformationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfSourceInformationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapURLAliasDictionary(const SkPdfObject& in, SkPdfURLAliasDictionary** out) {
+  return mapURLAliasDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapURLAliasDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfURLAliasDictionary** out) {
+  if (!isURLAliasDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfURLAliasDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapWebCaptureCommandDictionary(const SkPdfObject& in, SkPdfWebCaptureCommandDictionary** out) {
+  return mapWebCaptureCommandDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapWebCaptureCommandDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureCommandDictionary** out) {
+  if (!isWebCaptureCommandDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfWebCaptureCommandDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapWebCaptureCommandSettingsDictionary(const SkPdfObject& in, SkPdfWebCaptureCommandSettingsDictionary** out) {
+  return mapWebCaptureCommandSettingsDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapWebCaptureCommandSettingsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureCommandSettingsDictionary** out) {
+  if (!isWebCaptureCommandSettingsDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfWebCaptureCommandSettingsDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapBoxColorInformationDictionary(const SkPdfObject& in, SkPdfBoxColorInformationDictionary** out) {
+  return mapBoxColorInformationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapBoxColorInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBoxColorInformationDictionary** out) {
+  if (!isBoxColorInformationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfBoxColorInformationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapBoxStyleDictionary(const SkPdfObject& in, SkPdfBoxStyleDictionary** out) {
+  return mapBoxStyleDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapBoxStyleDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBoxStyleDictionary** out) {
+  if (!isBoxStyleDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfBoxStyleDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapPrinterMarkAnnotationDictionary(const SkPdfObject& in, SkPdfPrinterMarkAnnotationDictionary** out) {
+  return mapPrinterMarkAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapPrinterMarkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPrinterMarkAnnotationDictionary** out) {
+  if (!isPrinterMarkAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfPrinterMarkAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapPrinterMarkFormDictionary(const SkPdfObject& in, SkPdfPrinterMarkFormDictionary** out) {
+  return mapPrinterMarkFormDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapPrinterMarkFormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPrinterMarkFormDictionary** out) {
+  if (!isPrinterMarkFormDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfPrinterMarkFormDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapSeparationDictionary(const SkPdfObject& in, SkPdfSeparationDictionary** out) {
+  return mapSeparationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapSeparationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSeparationDictionary** out) {
+  if (!isSeparationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfSeparationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapPDF_XOutputIntentDictionary(const SkPdfObject& in, SkPdfPDF_XOutputIntentDictionary** out) {
+  return mapPDF_XOutputIntentDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapPDF_XOutputIntentDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPDF_XOutputIntentDictionary** out) {
+  if (!isPDF_XOutputIntentDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfPDF_XOutputIntentDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapTrapNetworkAnnotationDictionary(const SkPdfObject& in, SkPdfTrapNetworkAnnotationDictionary** out) {
+  return mapTrapNetworkAnnotationDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapTrapNetworkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTrapNetworkAnnotationDictionary** out) {
+  if (!isTrapNetworkAnnotationDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfTrapNetworkAnnotationDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapTrapNetworkAppearanceStreamDictionary(const SkPdfObject& in, SkPdfTrapNetworkAppearanceStreamDictionary** out) {
+  return mapTrapNetworkAppearanceStreamDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapTrapNetworkAppearanceStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTrapNetworkAppearanceStreamDictionary** out) {
+  if (!isTrapNetworkAppearanceStreamDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfTrapNetworkAppearanceStreamDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapOpiVersionDictionary(const SkPdfObject& in, SkPdfOpiVersionDictionary** out) {
+  return mapOpiVersionDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapOpiVersionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfOpiVersionDictionary** out) {
+  if (!isOpiVersionDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfOpiVersionDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool mapMultiMasterFontDictionary(const SkPdfObject& in, SkPdfMultiMasterFontDictionary** out) {
+  return mapMultiMasterFontDictionary(*in.doc(), *in.podofo(), out);
+}
+
+bool mapMultiMasterFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMultiMasterFontDictionary** out) {
+  if (!isMultiMasterFontDictionary(podofoDoc, podofoObj)) return false;
+
+
+  *out = new SkPdfMultiMasterFontDictionary(&podofoDoc, &podofoObj);
+  return true;
+}
+
+bool isObject(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ObjectFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfObject** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapObject(*pdfDoc, *value, (SkPdfObject**)data);
+}
+
+bool ObjectFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfObject** data) {
+  if (ObjectFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ObjectFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isNull(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return podofoObj.GetDataType() == ePdfDataType_Null;
+}
+
+bool NullFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfNull** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapNull(*pdfDoc, *value, (SkPdfNull**)data);
+}
+
+bool NullFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfNull** data) {
+  if (NullFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return NullFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isBoolean(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return podofoObj.GetDataType() == ePdfDataType_Bool;
+}
+
+bool BooleanFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfBoolean** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapBoolean(*pdfDoc, *value, (SkPdfBoolean**)data);
+}
+
+bool BooleanFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfBoolean** data) {
+  if (BooleanFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return BooleanFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isInteger(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return podofoObj.GetDataType() == ePdfDataType_Number || podofoObj.GetDataType() == ePdfDataType_Real;
+}
+
+bool IntegerFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfInteger** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapInteger(*pdfDoc, *value, (SkPdfInteger**)data);
+}
+
+bool IntegerFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfInteger** data) {
+  if (IntegerFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return IntegerFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isNumber(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return podofoObj.GetDataType() == ePdfDataType_Number || podofoObj.GetDataType() == ePdfDataType_Real;
+}
+
+bool NumberFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfNumber** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapNumber(*pdfDoc, *value, (SkPdfNumber**)data);
+}
+
+bool NumberFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfNumber** data) {
+  if (NumberFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return NumberFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isName(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return podofoObj.GetDataType() == ePdfDataType_Name;
+}
+
+bool NameFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfName** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapName(*pdfDoc, *value, (SkPdfName**)data);
+}
+
+bool NameFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfName** data) {
+  if (NameFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return NameFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isReference(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return podofoObj.GetDataType() == ePdfDataType_Reference;
+}
+
+bool ReferenceFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfReference** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapReference(*pdfDoc, *value, (SkPdfReference**)data);
+}
+
+bool ReferenceFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfReference** data) {
+  if (ReferenceFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ReferenceFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isArray(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return podofoObj.GetDataType() == ePdfDataType_Array;
+}
+
+bool ArrayFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfArray** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapArray(*pdfDoc, *value, (SkPdfArray**)data);
+}
+
+bool ArrayFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfArray** data) {
+  if (ArrayFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ArrayFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isString(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return podofoObj.GetDataType() == ePdfDataType_String || podofoObj.GetDataType() == ePdfDataType_HexString;
+}
+
+bool StringFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfString** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapString(*pdfDoc, *value, (SkPdfString**)data);
+}
+
+bool StringFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfString** data) {
+  if (StringFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return StringFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isHexString(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return podofoObj.GetDataType() == ePdfDataType_HexString;
+}
+
+bool HexStringFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfHexString** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapHexString(*pdfDoc, *value, (SkPdfHexString**)data);
+}
+
+bool HexStringFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfHexString** data) {
+  if (HexStringFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return HexStringFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return podofoObj.GetDataType() == ePdfDataType_Dictionary;
+}
+
+bool DictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapDictionary(*pdfDoc, *value, (SkPdfDictionary**)data);
+}
+
+bool DictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfDictionary** data) {
+  if (DictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return DictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isStream(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool StreamFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStream** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapStream(*pdfDoc, *value, (SkPdfStream**)data);
+}
+
+bool StreamFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStream** data) {
+  if (StreamFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return StreamFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isXObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool XObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfXObjectDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapXObjectDictionary(*pdfDoc, *value, (SkPdfXObjectDictionary**)data);
+}
+
+bool XObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfXObjectDictionary** data) {
+  if (XObjectDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return XObjectDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFontDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFontDictionary(*pdfDoc, *value, (SkPdfFontDictionary**)data);
+}
+
+bool FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFontDictionary** data) {
+  if (FontDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FontDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isTrueTypeFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  std::string Subtype;
+  if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
+  if ((Subtype != "TrueType")) return false;
+
+  return true;
+}
+
+bool TrueTypeFontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTrueTypeFontDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapTrueTypeFontDictionary(*pdfDoc, *value, (SkPdfTrueTypeFontDictionary**)data);
+}
+
+bool TrueTypeFontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTrueTypeFontDictionary** data) {
+  if (TrueTypeFontDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return TrueTypeFontDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isStreamCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool StreamCommonDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStreamCommonDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapStreamCommonDictionary(*pdfDoc, *value, (SkPdfStreamCommonDictionary**)data);
+}
+
+bool StreamCommonDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStreamCommonDictionary** data) {
+  if (StreamCommonDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return StreamCommonDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isLzwdecodeAndFlatedecodeFiltersDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool LzwdecodeAndFlatedecodeFiltersDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfLzwdecodeAndFlatedecodeFiltersDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapLzwdecodeAndFlatedecodeFiltersDictionary(*pdfDoc, *value, (SkPdfLzwdecodeAndFlatedecodeFiltersDictionary**)data);
+}
+
+bool LzwdecodeAndFlatedecodeFiltersDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfLzwdecodeAndFlatedecodeFiltersDictionary** data) {
+  if (LzwdecodeAndFlatedecodeFiltersDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return LzwdecodeAndFlatedecodeFiltersDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isCcittfaxdecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool CcittfaxdecodeFilterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCcittfaxdecodeFilterDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapCcittfaxdecodeFilterDictionary(*pdfDoc, *value, (SkPdfCcittfaxdecodeFilterDictionary**)data);
+}
+
+bool CcittfaxdecodeFilterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCcittfaxdecodeFilterDictionary** data) {
+  if (CcittfaxdecodeFilterDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return CcittfaxdecodeFilterDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isJbig2DecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Jbig2DecodeFilterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfJbig2DecodeFilterDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapJbig2DecodeFilterDictionary(*pdfDoc, *value, (SkPdfJbig2DecodeFilterDictionary**)data);
+}
+
+bool Jbig2DecodeFilterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfJbig2DecodeFilterDictionary** data) {
+  if (Jbig2DecodeFilterDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Jbig2DecodeFilterDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isDctdecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool DctdecodeFilterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfDctdecodeFilterDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapDctdecodeFilterDictionary(*pdfDoc, *value, (SkPdfDctdecodeFilterDictionary**)data);
+}
+
+bool DctdecodeFilterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfDctdecodeFilterDictionary** data) {
+  if (DctdecodeFilterDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return DctdecodeFilterDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFileTrailerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FileTrailerDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFileTrailerDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFileTrailerDictionary(*pdfDoc, *value, (SkPdfFileTrailerDictionary**)data);
+}
+
+bool FileTrailerDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFileTrailerDictionary** data) {
+  if (FileTrailerDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FileTrailerDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isEncryptionCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool EncryptionCommonDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfEncryptionCommonDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapEncryptionCommonDictionary(*pdfDoc, *value, (SkPdfEncryptionCommonDictionary**)data);
+}
+
+bool EncryptionCommonDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfEncryptionCommonDictionary** data) {
+  if (EncryptionCommonDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return EncryptionCommonDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isStandardSecurityHandlerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool StandardSecurityHandlerDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStandardSecurityHandlerDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapStandardSecurityHandlerDictionary(*pdfDoc, *value, (SkPdfStandardSecurityHandlerDictionary**)data);
+}
+
+bool StandardSecurityHandlerDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStandardSecurityHandlerDictionary** data) {
+  if (StandardSecurityHandlerDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return StandardSecurityHandlerDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isCatalogDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool CatalogDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCatalogDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapCatalogDictionary(*pdfDoc, *value, (SkPdfCatalogDictionary**)data);
+}
+
+bool CatalogDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCatalogDictionary** data) {
+  if (CatalogDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return CatalogDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isPageTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool PageTreeNodeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPageTreeNodeDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapPageTreeNodeDictionary(*pdfDoc, *value, (SkPdfPageTreeNodeDictionary**)data);
+}
+
+bool PageTreeNodeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPageTreeNodeDictionary** data) {
+  if (PageTreeNodeDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return PageTreeNodeDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isPageObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool PageObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPageObjectDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapPageObjectDictionary(*pdfDoc, *value, (SkPdfPageObjectDictionary**)data);
+}
+
+bool PageObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPageObjectDictionary** data) {
+  if (PageObjectDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return PageObjectDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isNameDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool NameDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfNameDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapNameDictionary(*pdfDoc, *value, (SkPdfNameDictionary**)data);
+}
+
+bool NameDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfNameDictionary** data) {
+  if (NameDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return NameDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isResourceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ResourceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfResourceDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapResourceDictionary(*pdfDoc, *value, (SkPdfResourceDictionary**)data);
+}
+
+bool ResourceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfResourceDictionary** data) {
+  if (ResourceDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ResourceDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isNameTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool NameTreeNodeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfNameTreeNodeDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapNameTreeNodeDictionary(*pdfDoc, *value, (SkPdfNameTreeNodeDictionary**)data);
+}
+
+bool NameTreeNodeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfNameTreeNodeDictionary** data) {
+  if (NameTreeNodeDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return NameTreeNodeDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isNumberTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool NumberTreeNodeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfNumberTreeNodeDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapNumberTreeNodeDictionary(*pdfDoc, *value, (SkPdfNumberTreeNodeDictionary**)data);
+}
+
+bool NumberTreeNodeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfNumberTreeNodeDictionary** data) {
+  if (NumberTreeNodeDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return NumberTreeNodeDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFunctionCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FunctionCommonDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFunctionCommonDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFunctionCommonDictionary(*pdfDoc, *value, (SkPdfFunctionCommonDictionary**)data);
+}
+
+bool FunctionCommonDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFunctionCommonDictionary** data) {
+  if (FunctionCommonDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FunctionCommonDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType0FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type0FunctionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType0FunctionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType0FunctionDictionary(*pdfDoc, *value, (SkPdfType0FunctionDictionary**)data);
+}
+
+bool Type0FunctionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType0FunctionDictionary** data) {
+  if (Type0FunctionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type0FunctionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType2FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type2FunctionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType2FunctionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType2FunctionDictionary(*pdfDoc, *value, (SkPdfType2FunctionDictionary**)data);
+}
+
+bool Type2FunctionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType2FunctionDictionary** data) {
+  if (Type2FunctionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type2FunctionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType3FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type3FunctionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType3FunctionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType3FunctionDictionary(*pdfDoc, *value, (SkPdfType3FunctionDictionary**)data);
+}
+
+bool Type3FunctionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType3FunctionDictionary** data) {
+  if (Type3FunctionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type3FunctionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFileSpecificationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FileSpecificationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFileSpecificationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFileSpecificationDictionary(*pdfDoc, *value, (SkPdfFileSpecificationDictionary**)data);
+}
+
+bool FileSpecificationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFileSpecificationDictionary** data) {
+  if (FileSpecificationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FileSpecificationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isEmbeddedFileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool EmbeddedFileStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfEmbeddedFileStreamDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapEmbeddedFileStreamDictionary(*pdfDoc, *value, (SkPdfEmbeddedFileStreamDictionary**)data);
+}
+
+bool EmbeddedFileStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfEmbeddedFileStreamDictionary** data) {
+  if (EmbeddedFileStreamDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return EmbeddedFileStreamDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isEmbeddedFileParameterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool EmbeddedFileParameterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfEmbeddedFileParameterDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapEmbeddedFileParameterDictionary(*pdfDoc, *value, (SkPdfEmbeddedFileParameterDictionary**)data);
+}
+
+bool EmbeddedFileParameterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfEmbeddedFileParameterDictionary** data) {
+  if (EmbeddedFileParameterDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return EmbeddedFileParameterDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isMacOsFileInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool MacOsFileInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMacOsFileInformationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapMacOsFileInformationDictionary(*pdfDoc, *value, (SkPdfMacOsFileInformationDictionary**)data);
+}
+
+bool MacOsFileInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMacOsFileInformationDictionary** data) {
+  if (MacOsFileInformationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return MacOsFileInformationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isGraphicsStateDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool GraphicsStateDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfGraphicsStateDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapGraphicsStateDictionary(*pdfDoc, *value, (SkPdfGraphicsStateDictionary**)data);
+}
+
+bool GraphicsStateDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfGraphicsStateDictionary** data) {
+  if (GraphicsStateDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return GraphicsStateDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isCalgrayColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool CalgrayColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCalgrayColorSpaceDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapCalgrayColorSpaceDictionary(*pdfDoc, *value, (SkPdfCalgrayColorSpaceDictionary**)data);
+}
+
+bool CalgrayColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCalgrayColorSpaceDictionary** data) {
+  if (CalgrayColorSpaceDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return CalgrayColorSpaceDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isCalrgbColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool CalrgbColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCalrgbColorSpaceDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapCalrgbColorSpaceDictionary(*pdfDoc, *value, (SkPdfCalrgbColorSpaceDictionary**)data);
+}
+
+bool CalrgbColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCalrgbColorSpaceDictionary** data) {
+  if (CalrgbColorSpaceDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return CalrgbColorSpaceDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isLabColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool LabColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfLabColorSpaceDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapLabColorSpaceDictionary(*pdfDoc, *value, (SkPdfLabColorSpaceDictionary**)data);
+}
+
+bool LabColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfLabColorSpaceDictionary** data) {
+  if (LabColorSpaceDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return LabColorSpaceDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isIccProfileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool IccProfileStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfIccProfileStreamDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapIccProfileStreamDictionary(*pdfDoc, *value, (SkPdfIccProfileStreamDictionary**)data);
+}
+
+bool IccProfileStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfIccProfileStreamDictionary** data) {
+  if (IccProfileStreamDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return IccProfileStreamDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isDeviceNColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool DeviceNColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfDeviceNColorSpaceDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapDeviceNColorSpaceDictionary(*pdfDoc, *value, (SkPdfDeviceNColorSpaceDictionary**)data);
+}
+
+bool DeviceNColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfDeviceNColorSpaceDictionary** data) {
+  if (DeviceNColorSpaceDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return DeviceNColorSpaceDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType1PatternDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type1PatternDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType1PatternDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType1PatternDictionary(*pdfDoc, *value, (SkPdfType1PatternDictionary**)data);
+}
+
+bool Type1PatternDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType1PatternDictionary** data) {
+  if (Type1PatternDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type1PatternDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType2PatternDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type2PatternDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType2PatternDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType2PatternDictionary(*pdfDoc, *value, (SkPdfType2PatternDictionary**)data);
+}
+
+bool Type2PatternDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType2PatternDictionary** data) {
+  if (Type2PatternDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type2PatternDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfShadingDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapShadingDictionary(*pdfDoc, *value, (SkPdfShadingDictionary**)data);
+}
+
+bool ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfShadingDictionary** data) {
+  if (ShadingDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ShadingDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType1ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type1ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType1ShadingDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType1ShadingDictionary(*pdfDoc, *value, (SkPdfType1ShadingDictionary**)data);
+}
+
+bool Type1ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType1ShadingDictionary** data) {
+  if (Type1ShadingDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type1ShadingDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType2ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type2ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType2ShadingDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType2ShadingDictionary(*pdfDoc, *value, (SkPdfType2ShadingDictionary**)data);
+}
+
+bool Type2ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType2ShadingDictionary** data) {
+  if (Type2ShadingDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type2ShadingDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType3ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type3ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType3ShadingDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType3ShadingDictionary(*pdfDoc, *value, (SkPdfType3ShadingDictionary**)data);
+}
+
+bool Type3ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType3ShadingDictionary** data) {
+  if (Type3ShadingDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type3ShadingDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType4ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type4ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType4ShadingDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType4ShadingDictionary(*pdfDoc, *value, (SkPdfType4ShadingDictionary**)data);
+}
+
+bool Type4ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType4ShadingDictionary** data) {
+  if (Type4ShadingDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type4ShadingDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType5ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type5ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType5ShadingDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType5ShadingDictionary(*pdfDoc, *value, (SkPdfType5ShadingDictionary**)data);
+}
+
+bool Type5ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType5ShadingDictionary** data) {
+  if (Type5ShadingDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type5ShadingDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType6ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type6ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType6ShadingDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType6ShadingDictionary(*pdfDoc, *value, (SkPdfType6ShadingDictionary**)data);
+}
+
+bool Type6ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType6ShadingDictionary** data) {
+  if (Type6ShadingDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type6ShadingDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  std::string Subtype;
+  if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
+  if ((Subtype != "Image")) return false;
+
+  return true;
+}
+
+bool ImageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfImageDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapImageDictionary(*pdfDoc, *value, (SkPdfImageDictionary**)data);
+}
+
+bool ImageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfImageDictionary** data) {
+  if (ImageDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ImageDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isAlternateImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool AlternateImageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfAlternateImageDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapAlternateImageDictionary(*pdfDoc, *value, (SkPdfAlternateImageDictionary**)data);
+}
+
+bool AlternateImageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfAlternateImageDictionary** data) {
+  if (AlternateImageDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return AlternateImageDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType1FormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  std::string Subtype;
+  if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
+  if ((Subtype != "Form")) return false;
+
+  return true;
+}
+
+bool Type1FormDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType1FormDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType1FormDictionary(*pdfDoc, *value, (SkPdfType1FormDictionary**)data);
+}
+
+bool Type1FormDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType1FormDictionary** data) {
+  if (Type1FormDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type1FormDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isGroupAttributesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool GroupAttributesDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfGroupAttributesDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapGroupAttributesDictionary(*pdfDoc, *value, (SkPdfGroupAttributesDictionary**)data);
+}
+
+bool GroupAttributesDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfGroupAttributesDictionary** data) {
+  if (GroupAttributesDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return GroupAttributesDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfReferenceDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapReferenceDictionary(*pdfDoc, *value, (SkPdfReferenceDictionary**)data);
+}
+
+bool ReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfReferenceDictionary** data) {
+  if (ReferenceDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ReferenceDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isPSXobjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool PSXobjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPSXobjectDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapPSXobjectDictionary(*pdfDoc, *value, (SkPdfPSXobjectDictionary**)data);
+}
+
+bool PSXobjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPSXobjectDictionary** data) {
+  if (PSXobjectDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return PSXobjectDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType1FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  std::string Subtype;
+  if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
+  if ((Subtype != "MMType1") && (Subtype != "TrueType") && (Subtype != "Type3") && (Subtype != "Type1")) return false;
+
+  return true;
+}
+
+bool Type1FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType1FontDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType1FontDictionary(*pdfDoc, *value, (SkPdfType1FontDictionary**)data);
+}
+
+bool Type1FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType1FontDictionary** data) {
+  if (Type1FontDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type1FontDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType3FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  std::string Subtype;
+  if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
+  if ((Subtype != "Type3")) return false;
+
+  return true;
+}
+
+bool Type3FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType3FontDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType3FontDictionary(*pdfDoc, *value, (SkPdfType3FontDictionary**)data);
+}
+
+bool Type3FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType3FontDictionary** data) {
+  if (Type3FontDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type3FontDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isEncodingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool EncodingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfEncodingDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapEncodingDictionary(*pdfDoc, *value, (SkPdfEncodingDictionary**)data);
+}
+
+bool EncodingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfEncodingDictionary** data) {
+  if (EncodingDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return EncodingDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isCIDSystemInfoDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool CIDSystemInfoDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCIDSystemInfoDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapCIDSystemInfoDictionary(*pdfDoc, *value, (SkPdfCIDSystemInfoDictionary**)data);
+}
+
+bool CIDSystemInfoDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCIDSystemInfoDictionary** data) {
+  if (CIDSystemInfoDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return CIDSystemInfoDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isCIDFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  std::string Subtype;
+  if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
+  if ((Subtype != "CIDFontType0") && (Subtype != "CIDFontType2")) return false;
+
+  return true;
+}
+
+bool CIDFontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCIDFontDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapCIDFontDictionary(*pdfDoc, *value, (SkPdfCIDFontDictionary**)data);
+}
+
+bool CIDFontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCIDFontDictionary** data) {
+  if (CIDFontDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return CIDFontDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isCMapDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool CMapDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCMapDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapCMapDictionary(*pdfDoc, *value, (SkPdfCMapDictionary**)data);
+}
+
+bool CMapDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCMapDictionary** data) {
+  if (CMapDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return CMapDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType0FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  std::string Subtype;
+  if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
+  if ((Subtype != "Type0")) return false;
+
+  return true;
+}
+
+bool Type0FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType0FontDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType0FontDictionary(*pdfDoc, *value, (SkPdfType0FontDictionary**)data);
+}
+
+bool Type0FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType0FontDictionary** data) {
+  if (Type0FontDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type0FontDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFontDescriptorDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FontDescriptorDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFontDescriptorDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFontDescriptorDictionary(*pdfDoc, *value, (SkPdfFontDescriptorDictionary**)data);
+}
+
+bool FontDescriptorDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFontDescriptorDictionary** data) {
+  if (FontDescriptorDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FontDescriptorDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isCIDFontDescriptorDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool CIDFontDescriptorDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCIDFontDescriptorDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapCIDFontDescriptorDictionary(*pdfDoc, *value, (SkPdfCIDFontDescriptorDictionary**)data);
+}
+
+bool CIDFontDescriptorDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCIDFontDescriptorDictionary** data) {
+  if (CIDFontDescriptorDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return CIDFontDescriptorDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isEmbeddedFontStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool EmbeddedFontStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfEmbeddedFontStreamDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapEmbeddedFontStreamDictionary(*pdfDoc, *value, (SkPdfEmbeddedFontStreamDictionary**)data);
+}
+
+bool EmbeddedFontStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfEmbeddedFontStreamDictionary** data) {
+  if (EmbeddedFontStreamDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return EmbeddedFontStreamDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType1HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type1HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType1HalftoneDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType1HalftoneDictionary(*pdfDoc, *value, (SkPdfType1HalftoneDictionary**)data);
+}
+
+bool Type1HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType1HalftoneDictionary** data) {
+  if (Type1HalftoneDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type1HalftoneDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType6HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type6HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType6HalftoneDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType6HalftoneDictionary(*pdfDoc, *value, (SkPdfType6HalftoneDictionary**)data);
+}
+
+bool Type6HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType6HalftoneDictionary** data) {
+  if (Type6HalftoneDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type6HalftoneDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType10HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type10HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType10HalftoneDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType10HalftoneDictionary(*pdfDoc, *value, (SkPdfType10HalftoneDictionary**)data);
+}
+
+bool Type10HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType10HalftoneDictionary** data) {
+  if (Type10HalftoneDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type10HalftoneDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType16HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type16HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType16HalftoneDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType16HalftoneDictionary(*pdfDoc, *value, (SkPdfType16HalftoneDictionary**)data);
+}
+
+bool Type16HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType16HalftoneDictionary** data) {
+  if (Type16HalftoneDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type16HalftoneDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isType5HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool Type5HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType5HalftoneDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapType5HalftoneDictionary(*pdfDoc, *value, (SkPdfType5HalftoneDictionary**)data);
+}
+
+bool Type5HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType5HalftoneDictionary** data) {
+  if (Type5HalftoneDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return Type5HalftoneDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isSoftMaskDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool SoftMaskDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSoftMaskDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapSoftMaskDictionary(*pdfDoc, *value, (SkPdfSoftMaskDictionary**)data);
+}
+
+bool SoftMaskDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSoftMaskDictionary** data) {
+  if (SoftMaskDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return SoftMaskDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isSoftMaskImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool SoftMaskImageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSoftMaskImageDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapSoftMaskImageDictionary(*pdfDoc, *value, (SkPdfSoftMaskImageDictionary**)data);
+}
+
+bool SoftMaskImageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSoftMaskImageDictionary** data) {
+  if (SoftMaskImageDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return SoftMaskImageDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isTransparencyGroupDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool TransparencyGroupDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTransparencyGroupDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapTransparencyGroupDictionary(*pdfDoc, *value, (SkPdfTransparencyGroupDictionary**)data);
+}
+
+bool TransparencyGroupDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTransparencyGroupDictionary** data) {
+  if (TransparencyGroupDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return TransparencyGroupDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isViewerPreferencesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ViewerPreferencesDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfViewerPreferencesDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapViewerPreferencesDictionary(*pdfDoc, *value, (SkPdfViewerPreferencesDictionary**)data);
+}
+
+bool ViewerPreferencesDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfViewerPreferencesDictionary** data) {
+  if (ViewerPreferencesDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ViewerPreferencesDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isOutlineDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool OutlineDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfOutlineDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapOutlineDictionary(*pdfDoc, *value, (SkPdfOutlineDictionary**)data);
+}
+
+bool OutlineDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfOutlineDictionary** data) {
+  if (OutlineDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return OutlineDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isOutlineItemDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool OutlineItemDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfOutlineItemDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapOutlineItemDictionary(*pdfDoc, *value, (SkPdfOutlineItemDictionary**)data);
+}
+
+bool OutlineItemDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfOutlineItemDictionary** data) {
+  if (OutlineItemDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return OutlineItemDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isPageLabelDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool PageLabelDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPageLabelDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapPageLabelDictionary(*pdfDoc, *value, (SkPdfPageLabelDictionary**)data);
+}
+
+bool PageLabelDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPageLabelDictionary** data) {
+  if (PageLabelDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return PageLabelDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isThreadDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ThreadDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfThreadDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapThreadDictionary(*pdfDoc, *value, (SkPdfThreadDictionary**)data);
+}
+
+bool ThreadDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfThreadDictionary** data) {
+  if (ThreadDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ThreadDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isBeadDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool BeadDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfBeadDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapBeadDictionary(*pdfDoc, *value, (SkPdfBeadDictionary**)data);
+}
+
+bool BeadDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfBeadDictionary** data) {
+  if (BeadDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return BeadDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isTransitionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool TransitionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTransitionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapTransitionDictionary(*pdfDoc, *value, (SkPdfTransitionDictionary**)data);
+}
+
+bool TransitionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTransitionDictionary** data) {
+  if (TransitionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return TransitionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool AnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapAnnotationDictionary(*pdfDoc, *value, (SkPdfAnnotationDictionary**)data);
+}
+
+bool AnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfAnnotationDictionary** data) {
+  if (AnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return AnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isBorderStyleDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool BorderStyleDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfBorderStyleDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapBorderStyleDictionary(*pdfDoc, *value, (SkPdfBorderStyleDictionary**)data);
+}
+
+bool BorderStyleDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfBorderStyleDictionary** data) {
+  if (BorderStyleDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return BorderStyleDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isAppearanceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool AppearanceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfAppearanceDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapAppearanceDictionary(*pdfDoc, *value, (SkPdfAppearanceDictionary**)data);
+}
+
+bool AppearanceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfAppearanceDictionary** data) {
+  if (AppearanceDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return AppearanceDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isTextAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool TextAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTextAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapTextAnnotationDictionary(*pdfDoc, *value, (SkPdfTextAnnotationDictionary**)data);
+}
+
+bool TextAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTextAnnotationDictionary** data) {
+  if (TextAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return TextAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isALinkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ALinkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfALinkAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapALinkAnnotationDictionary(*pdfDoc, *value, (SkPdfALinkAnnotationDictionary**)data);
+}
+
+bool ALinkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfALinkAnnotationDictionary** data) {
+  if (ALinkAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ALinkAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFreeTextAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FreeTextAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFreeTextAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFreeTextAnnotationDictionary(*pdfDoc, *value, (SkPdfFreeTextAnnotationDictionary**)data);
+}
+
+bool FreeTextAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFreeTextAnnotationDictionary** data) {
+  if (FreeTextAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FreeTextAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isLineAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool LineAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfLineAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapLineAnnotationDictionary(*pdfDoc, *value, (SkPdfLineAnnotationDictionary**)data);
+}
+
+bool LineAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfLineAnnotationDictionary** data) {
+  if (LineAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return LineAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isSquareOrCircleAnnotation(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool SquareOrCircleAnnotationFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSquareOrCircleAnnotation** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapSquareOrCircleAnnotation(*pdfDoc, *value, (SkPdfSquareOrCircleAnnotation**)data);
+}
+
+bool SquareOrCircleAnnotationFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSquareOrCircleAnnotation** data) {
+  if (SquareOrCircleAnnotationFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return SquareOrCircleAnnotationFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isMarkupAnnotationsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool MarkupAnnotationsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMarkupAnnotationsDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapMarkupAnnotationsDictionary(*pdfDoc, *value, (SkPdfMarkupAnnotationsDictionary**)data);
+}
+
+bool MarkupAnnotationsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMarkupAnnotationsDictionary** data) {
+  if (MarkupAnnotationsDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return MarkupAnnotationsDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isRubberStampAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool RubberStampAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfRubberStampAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapRubberStampAnnotationDictionary(*pdfDoc, *value, (SkPdfRubberStampAnnotationDictionary**)data);
+}
+
+bool RubberStampAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfRubberStampAnnotationDictionary** data) {
+  if (RubberStampAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return RubberStampAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isInkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool InkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfInkAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapInkAnnotationDictionary(*pdfDoc, *value, (SkPdfInkAnnotationDictionary**)data);
+}
+
+bool InkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfInkAnnotationDictionary** data) {
+  if (InkAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return InkAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isPopUpAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool PopUpAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPopUpAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapPopUpAnnotationDictionary(*pdfDoc, *value, (SkPdfPopUpAnnotationDictionary**)data);
+}
+
+bool PopUpAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPopUpAnnotationDictionary** data) {
+  if (PopUpAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return PopUpAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFileAttachmentAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FileAttachmentAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFileAttachmentAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFileAttachmentAnnotationDictionary(*pdfDoc, *value, (SkPdfFileAttachmentAnnotationDictionary**)data);
+}
+
+bool FileAttachmentAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFileAttachmentAnnotationDictionary** data) {
+  if (FileAttachmentAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FileAttachmentAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isSoundAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool SoundAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSoundAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapSoundAnnotationDictionary(*pdfDoc, *value, (SkPdfSoundAnnotationDictionary**)data);
+}
+
+bool SoundAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSoundAnnotationDictionary** data) {
+  if (SoundAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return SoundAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isMovieAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool MovieAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMovieAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapMovieAnnotationDictionary(*pdfDoc, *value, (SkPdfMovieAnnotationDictionary**)data);
+}
+
+bool MovieAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMovieAnnotationDictionary** data) {
+  if (MovieAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return MovieAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isWidgetAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool WidgetAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWidgetAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapWidgetAnnotationDictionary(*pdfDoc, *value, (SkPdfWidgetAnnotationDictionary**)data);
+}
+
+bool WidgetAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWidgetAnnotationDictionary** data) {
+  if (WidgetAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return WidgetAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapActionDictionary(*pdfDoc, *value, (SkPdfActionDictionary**)data);
+}
+
+bool ActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfActionDictionary** data) {
+  if (ActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isAnnotationActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool AnnotationActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfAnnotationActionsDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapAnnotationActionsDictionary(*pdfDoc, *value, (SkPdfAnnotationActionsDictionary**)data);
+}
+
+bool AnnotationActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfAnnotationActionsDictionary** data) {
+  if (AnnotationActionsDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return AnnotationActionsDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isPageObjectActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool PageObjectActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPageObjectActionsDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapPageObjectActionsDictionary(*pdfDoc, *value, (SkPdfPageObjectActionsDictionary**)data);
+}
+
+bool PageObjectActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPageObjectActionsDictionary** data) {
+  if (PageObjectActionsDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return PageObjectActionsDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFormFieldActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FormFieldActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFormFieldActionsDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFormFieldActionsDictionary(*pdfDoc, *value, (SkPdfFormFieldActionsDictionary**)data);
+}
+
+bool FormFieldActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFormFieldActionsDictionary** data) {
+  if (FormFieldActionsDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FormFieldActionsDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isDocumentCatalogActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool DocumentCatalogActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfDocumentCatalogActionsDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapDocumentCatalogActionsDictionary(*pdfDoc, *value, (SkPdfDocumentCatalogActionsDictionary**)data);
+}
+
+bool DocumentCatalogActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfDocumentCatalogActionsDictionary** data) {
+  if (DocumentCatalogActionsDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return DocumentCatalogActionsDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isGoToActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool GoToActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfGoToActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapGoToActionDictionary(*pdfDoc, *value, (SkPdfGoToActionDictionary**)data);
+}
+
+bool GoToActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfGoToActionDictionary** data) {
+  if (GoToActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return GoToActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isRemoteGoToActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool RemoteGoToActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfRemoteGoToActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapRemoteGoToActionDictionary(*pdfDoc, *value, (SkPdfRemoteGoToActionDictionary**)data);
+}
+
+bool RemoteGoToActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfRemoteGoToActionDictionary** data) {
+  if (RemoteGoToActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return RemoteGoToActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isLaunchActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool LaunchActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfLaunchActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapLaunchActionDictionary(*pdfDoc, *value, (SkPdfLaunchActionDictionary**)data);
+}
+
+bool LaunchActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfLaunchActionDictionary** data) {
+  if (LaunchActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return LaunchActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isWindowsLaunchActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool WindowsLaunchActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWindowsLaunchActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapWindowsLaunchActionDictionary(*pdfDoc, *value, (SkPdfWindowsLaunchActionDictionary**)data);
+}
+
+bool WindowsLaunchActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWindowsLaunchActionDictionary** data) {
+  if (WindowsLaunchActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return WindowsLaunchActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isThreadActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ThreadActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfThreadActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapThreadActionDictionary(*pdfDoc, *value, (SkPdfThreadActionDictionary**)data);
+}
+
+bool ThreadActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfThreadActionDictionary** data) {
+  if (ThreadActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ThreadActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isURIActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool URIActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfURIActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapURIActionDictionary(*pdfDoc, *value, (SkPdfURIActionDictionary**)data);
+}
+
+bool URIActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfURIActionDictionary** data) {
+  if (URIActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return URIActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isURIDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool URIDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfURIDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapURIDictionary(*pdfDoc, *value, (SkPdfURIDictionary**)data);
+}
+
+bool URIDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfURIDictionary** data) {
+  if (URIDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return URIDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isSoundActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool SoundActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSoundActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapSoundActionDictionary(*pdfDoc, *value, (SkPdfSoundActionDictionary**)data);
+}
+
+bool SoundActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSoundActionDictionary** data) {
+  if (SoundActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return SoundActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isMovieActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool MovieActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMovieActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapMovieActionDictionary(*pdfDoc, *value, (SkPdfMovieActionDictionary**)data);
+}
+
+bool MovieActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMovieActionDictionary** data) {
+  if (MovieActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return MovieActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isHideActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool HideActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfHideActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapHideActionDictionary(*pdfDoc, *value, (SkPdfHideActionDictionary**)data);
+}
+
+bool HideActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfHideActionDictionary** data) {
+  if (HideActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return HideActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isNamedActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool NamedActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfNamedActionsDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapNamedActionsDictionary(*pdfDoc, *value, (SkPdfNamedActionsDictionary**)data);
+}
+
+bool NamedActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfNamedActionsDictionary** data) {
+  if (NamedActionsDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return NamedActionsDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isInteractiveFormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool InteractiveFormDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfInteractiveFormDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapInteractiveFormDictionary(*pdfDoc, *value, (SkPdfInteractiveFormDictionary**)data);
+}
+
+bool InteractiveFormDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfInteractiveFormDictionary** data) {
+  if (InteractiveFormDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return InteractiveFormDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFieldDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFieldDictionary(*pdfDoc, *value, (SkPdfFieldDictionary**)data);
+}
+
+bool FieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFieldDictionary** data) {
+  if (FieldDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FieldDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isVariableTextFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool VariableTextFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfVariableTextFieldDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapVariableTextFieldDictionary(*pdfDoc, *value, (SkPdfVariableTextFieldDictionary**)data);
+}
+
+bool VariableTextFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfVariableTextFieldDictionary** data) {
+  if (VariableTextFieldDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return VariableTextFieldDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isAppearanceCharacteristicsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool AppearanceCharacteristicsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfAppearanceCharacteristicsDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapAppearanceCharacteristicsDictionary(*pdfDoc, *value, (SkPdfAppearanceCharacteristicsDictionary**)data);
+}
+
+bool AppearanceCharacteristicsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfAppearanceCharacteristicsDictionary** data) {
+  if (AppearanceCharacteristicsDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return AppearanceCharacteristicsDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isCheckboxFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool CheckboxFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCheckboxFieldDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapCheckboxFieldDictionary(*pdfDoc, *value, (SkPdfCheckboxFieldDictionary**)data);
+}
+
+bool CheckboxFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCheckboxFieldDictionary** data) {
+  if (CheckboxFieldDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return CheckboxFieldDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isRadioButtonFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool RadioButtonFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfRadioButtonFieldDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapRadioButtonFieldDictionary(*pdfDoc, *value, (SkPdfRadioButtonFieldDictionary**)data);
+}
+
+bool RadioButtonFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfRadioButtonFieldDictionary** data) {
+  if (RadioButtonFieldDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return RadioButtonFieldDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isTextFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool TextFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTextFieldDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapTextFieldDictionary(*pdfDoc, *value, (SkPdfTextFieldDictionary**)data);
+}
+
+bool TextFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTextFieldDictionary** data) {
+  if (TextFieldDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return TextFieldDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isChoiceFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ChoiceFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfChoiceFieldDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapChoiceFieldDictionary(*pdfDoc, *value, (SkPdfChoiceFieldDictionary**)data);
+}
+
+bool ChoiceFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfChoiceFieldDictionary** data) {
+  if (ChoiceFieldDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ChoiceFieldDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isSignatureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool SignatureDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSignatureDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapSignatureDictionary(*pdfDoc, *value, (SkPdfSignatureDictionary**)data);
+}
+
+bool SignatureDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSignatureDictionary** data) {
+  if (SignatureDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return SignatureDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isSubmitFormActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool SubmitFormActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSubmitFormActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapSubmitFormActionDictionary(*pdfDoc, *value, (SkPdfSubmitFormActionDictionary**)data);
+}
+
+bool SubmitFormActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSubmitFormActionDictionary** data) {
+  if (SubmitFormActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return SubmitFormActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isResetFormActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ResetFormActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfResetFormActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapResetFormActionDictionary(*pdfDoc, *value, (SkPdfResetFormActionDictionary**)data);
+}
+
+bool ResetFormActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfResetFormActionDictionary** data) {
+  if (ResetFormActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ResetFormActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isImportDataActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ImportDataActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfImportDataActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapImportDataActionDictionary(*pdfDoc, *value, (SkPdfImportDataActionDictionary**)data);
+}
+
+bool ImportDataActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfImportDataActionDictionary** data) {
+  if (ImportDataActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ImportDataActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isJavascriptActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool JavascriptActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfJavascriptActionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapJavascriptActionDictionary(*pdfDoc, *value, (SkPdfJavascriptActionDictionary**)data);
+}
+
+bool JavascriptActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfJavascriptActionDictionary** data) {
+  if (JavascriptActionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return JavascriptActionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFDFTrailerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FDFTrailerDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFTrailerDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFDFTrailerDictionary(*pdfDoc, *value, (SkPdfFDFTrailerDictionary**)data);
+}
+
+bool FDFTrailerDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFTrailerDictionary** data) {
+  if (FDFTrailerDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FDFTrailerDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFDFCatalogDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FDFCatalogDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFCatalogDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFDFCatalogDictionary(*pdfDoc, *value, (SkPdfFDFCatalogDictionary**)data);
+}
+
+bool FDFCatalogDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFCatalogDictionary** data) {
+  if (FDFCatalogDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FDFCatalogDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFDFDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FDFDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFDFDictionary(*pdfDoc, *value, (SkPdfFDFDictionary**)data);
+}
+
+bool FDFDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFDictionary** data) {
+  if (FDFDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FDFDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isEncryptedEmbeddedFileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool EncryptedEmbeddedFileStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfEncryptedEmbeddedFileStreamDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapEncryptedEmbeddedFileStreamDictionary(*pdfDoc, *value, (SkPdfEncryptedEmbeddedFileStreamDictionary**)data);
+}
+
+bool EncryptedEmbeddedFileStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfEncryptedEmbeddedFileStreamDictionary** data) {
+  if (EncryptedEmbeddedFileStreamDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return EncryptedEmbeddedFileStreamDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isJavascriptDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool JavascriptDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfJavascriptDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapJavascriptDictionary(*pdfDoc, *value, (SkPdfJavascriptDictionary**)data);
+}
+
+bool JavascriptDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfJavascriptDictionary** data) {
+  if (JavascriptDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return JavascriptDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFDFFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FDFFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFFieldDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFDFFieldDictionary(*pdfDoc, *value, (SkPdfFDFFieldDictionary**)data);
+}
+
+bool FDFFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFFieldDictionary** data) {
+  if (FDFFieldDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FDFFieldDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isIconFitDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool IconFitDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfIconFitDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapIconFitDictionary(*pdfDoc, *value, (SkPdfIconFitDictionary**)data);
+}
+
+bool IconFitDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfIconFitDictionary** data) {
+  if (IconFitDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return IconFitDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFDFPageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FDFPageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFPageDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFDFPageDictionary(*pdfDoc, *value, (SkPdfFDFPageDictionary**)data);
+}
+
+bool FDFPageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFPageDictionary** data) {
+  if (FDFPageDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FDFPageDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFDFTemplateDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FDFTemplateDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFTemplateDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFDFTemplateDictionary(*pdfDoc, *value, (SkPdfFDFTemplateDictionary**)data);
+}
+
+bool FDFTemplateDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFTemplateDictionary** data) {
+  if (FDFTemplateDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FDFTemplateDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFDFNamedPageReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FDFNamedPageReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFNamedPageReferenceDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFDFNamedPageReferenceDictionary(*pdfDoc, *value, (SkPdfFDFNamedPageReferenceDictionary**)data);
+}
+
+bool FDFNamedPageReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFNamedPageReferenceDictionary** data) {
+  if (FDFNamedPageReferenceDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FDFNamedPageReferenceDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isFDFFileAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool FDFFileAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFFileAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapFDFFileAnnotationDictionary(*pdfDoc, *value, (SkPdfFDFFileAnnotationDictionary**)data);
+}
+
+bool FDFFileAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFFileAnnotationDictionary** data) {
+  if (FDFFileAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return FDFFileAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isSoundObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool SoundObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSoundObjectDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapSoundObjectDictionary(*pdfDoc, *value, (SkPdfSoundObjectDictionary**)data);
+}
+
+bool SoundObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSoundObjectDictionary** data) {
+  if (SoundObjectDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return SoundObjectDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isMovieDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool MovieDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMovieDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapMovieDictionary(*pdfDoc, *value, (SkPdfMovieDictionary**)data);
+}
+
+bool MovieDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMovieDictionary** data) {
+  if (MovieDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return MovieDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isMovieActivationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool MovieActivationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMovieActivationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapMovieActivationDictionary(*pdfDoc, *value, (SkPdfMovieActivationDictionary**)data);
+}
+
+bool MovieActivationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMovieActivationDictionary** data) {
+  if (MovieActivationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return MovieActivationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isDocumentInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool DocumentInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfDocumentInformationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapDocumentInformationDictionary(*pdfDoc, *value, (SkPdfDocumentInformationDictionary**)data);
+}
+
+bool DocumentInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfDocumentInformationDictionary** data) {
+  if (DocumentInformationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return DocumentInformationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isMetadataStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool MetadataStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMetadataStreamDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapMetadataStreamDictionary(*pdfDoc, *value, (SkPdfMetadataStreamDictionary**)data);
+}
+
+bool MetadataStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMetadataStreamDictionary** data) {
+  if (MetadataStreamDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return MetadataStreamDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isComponentsWithMetadataDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ComponentsWithMetadataDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfComponentsWithMetadataDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapComponentsWithMetadataDictionary(*pdfDoc, *value, (SkPdfComponentsWithMetadataDictionary**)data);
+}
+
+bool ComponentsWithMetadataDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfComponentsWithMetadataDictionary** data) {
+  if (ComponentsWithMetadataDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ComponentsWithMetadataDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isPagePieceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool PagePieceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPagePieceDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapPagePieceDictionary(*pdfDoc, *value, (SkPdfPagePieceDictionary**)data);
+}
+
+bool PagePieceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPagePieceDictionary** data) {
+  if (PagePieceDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return PagePieceDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isApplicationDataDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ApplicationDataDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfApplicationDataDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapApplicationDataDictionary(*pdfDoc, *value, (SkPdfApplicationDataDictionary**)data);
+}
+
+bool ApplicationDataDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfApplicationDataDictionary** data) {
+  if (ApplicationDataDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ApplicationDataDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isStructureTreeRootDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool StructureTreeRootDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStructureTreeRootDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapStructureTreeRootDictionary(*pdfDoc, *value, (SkPdfStructureTreeRootDictionary**)data);
+}
+
+bool StructureTreeRootDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStructureTreeRootDictionary** data) {
+  if (StructureTreeRootDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return StructureTreeRootDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isStructureElementDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool StructureElementDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStructureElementDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapStructureElementDictionary(*pdfDoc, *value, (SkPdfStructureElementDictionary**)data);
+}
+
+bool StructureElementDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStructureElementDictionary** data) {
+  if (StructureElementDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return StructureElementDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isMarkedContentReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool MarkedContentReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMarkedContentReferenceDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapMarkedContentReferenceDictionary(*pdfDoc, *value, (SkPdfMarkedContentReferenceDictionary**)data);
+}
+
+bool MarkedContentReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMarkedContentReferenceDictionary** data) {
+  if (MarkedContentReferenceDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return MarkedContentReferenceDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isObjectReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ObjectReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfObjectReferenceDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapObjectReferenceDictionary(*pdfDoc, *value, (SkPdfObjectReferenceDictionary**)data);
+}
+
+bool ObjectReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfObjectReferenceDictionary** data) {
+  if (ObjectReferenceDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ObjectReferenceDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isStructureElementAccessDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool StructureElementAccessDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStructureElementAccessDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapStructureElementAccessDictionary(*pdfDoc, *value, (SkPdfStructureElementAccessDictionary**)data);
+}
+
+bool StructureElementAccessDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStructureElementAccessDictionary** data) {
+  if (StructureElementAccessDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return StructureElementAccessDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isAttributeObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool AttributeObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfAttributeObjectDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapAttributeObjectDictionary(*pdfDoc, *value, (SkPdfAttributeObjectDictionary**)data);
+}
+
+bool AttributeObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfAttributeObjectDictionary** data) {
+  if (AttributeObjectDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return AttributeObjectDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isMarkInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool MarkInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMarkInformationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapMarkInformationDictionary(*pdfDoc, *value, (SkPdfMarkInformationDictionary**)data);
+}
+
+bool MarkInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMarkInformationDictionary** data) {
+  if (MarkInformationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return MarkInformationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isArtifactsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ArtifactsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfArtifactsDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapArtifactsDictionary(*pdfDoc, *value, (SkPdfArtifactsDictionary**)data);
+}
+
+bool ArtifactsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfArtifactsDictionary** data) {
+  if (ArtifactsDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ArtifactsDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isStandardStructureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool StandardStructureDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStandardStructureDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapStandardStructureDictionary(*pdfDoc, *value, (SkPdfStandardStructureDictionary**)data);
+}
+
+bool StandardStructureDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStandardStructureDictionary** data) {
+  if (StandardStructureDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return StandardStructureDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isBlockLevelStructureElementsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool BlockLevelStructureElementsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfBlockLevelStructureElementsDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapBlockLevelStructureElementsDictionary(*pdfDoc, *value, (SkPdfBlockLevelStructureElementsDictionary**)data);
+}
+
+bool BlockLevelStructureElementsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfBlockLevelStructureElementsDictionary** data) {
+  if (BlockLevelStructureElementsDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return BlockLevelStructureElementsDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isInlineLevelStructureElementsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool InlineLevelStructureElementsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfInlineLevelStructureElementsDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapInlineLevelStructureElementsDictionary(*pdfDoc, *value, (SkPdfInlineLevelStructureElementsDictionary**)data);
+}
+
+bool InlineLevelStructureElementsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfInlineLevelStructureElementsDictionary** data) {
+  if (InlineLevelStructureElementsDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return InlineLevelStructureElementsDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isListAttributeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool ListAttributeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfListAttributeDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapListAttributeDictionary(*pdfDoc, *value, (SkPdfListAttributeDictionary**)data);
+}
+
+bool ListAttributeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfListAttributeDictionary** data) {
+  if (ListAttributeDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return ListAttributeDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isTableAttributesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool TableAttributesDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTableAttributesDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapTableAttributesDictionary(*pdfDoc, *value, (SkPdfTableAttributesDictionary**)data);
+}
+
+bool TableAttributesDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTableAttributesDictionary** data) {
+  if (TableAttributesDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return TableAttributesDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isWebCaptureInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool WebCaptureInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWebCaptureInformationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapWebCaptureInformationDictionary(*pdfDoc, *value, (SkPdfWebCaptureInformationDictionary**)data);
+}
+
+bool WebCaptureInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWebCaptureInformationDictionary** data) {
+  if (WebCaptureInformationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return WebCaptureInformationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isWebCaptureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool WebCaptureDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWebCaptureDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapWebCaptureDictionary(*pdfDoc, *value, (SkPdfWebCaptureDictionary**)data);
+}
+
+bool WebCaptureDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWebCaptureDictionary** data) {
+  if (WebCaptureDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return WebCaptureDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isWebCapturePageSetDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool WebCapturePageSetDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWebCapturePageSetDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapWebCapturePageSetDictionary(*pdfDoc, *value, (SkPdfWebCapturePageSetDictionary**)data);
+}
+
+bool WebCapturePageSetDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWebCapturePageSetDictionary** data) {
+  if (WebCapturePageSetDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return WebCapturePageSetDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isWebCaptureImageSetDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool WebCaptureImageSetDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWebCaptureImageSetDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapWebCaptureImageSetDictionary(*pdfDoc, *value, (SkPdfWebCaptureImageSetDictionary**)data);
+}
+
+bool WebCaptureImageSetDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWebCaptureImageSetDictionary** data) {
+  if (WebCaptureImageSetDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return WebCaptureImageSetDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isSourceInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool SourceInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSourceInformationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapSourceInformationDictionary(*pdfDoc, *value, (SkPdfSourceInformationDictionary**)data);
+}
+
+bool SourceInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSourceInformationDictionary** data) {
+  if (SourceInformationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return SourceInformationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isURLAliasDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool URLAliasDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfURLAliasDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapURLAliasDictionary(*pdfDoc, *value, (SkPdfURLAliasDictionary**)data);
+}
+
+bool URLAliasDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfURLAliasDictionary** data) {
+  if (URLAliasDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return URLAliasDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isWebCaptureCommandDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool WebCaptureCommandDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWebCaptureCommandDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapWebCaptureCommandDictionary(*pdfDoc, *value, (SkPdfWebCaptureCommandDictionary**)data);
+}
+
+bool WebCaptureCommandDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWebCaptureCommandDictionary** data) {
+  if (WebCaptureCommandDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return WebCaptureCommandDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isWebCaptureCommandSettingsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool WebCaptureCommandSettingsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWebCaptureCommandSettingsDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapWebCaptureCommandSettingsDictionary(*pdfDoc, *value, (SkPdfWebCaptureCommandSettingsDictionary**)data);
+}
+
+bool WebCaptureCommandSettingsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWebCaptureCommandSettingsDictionary** data) {
+  if (WebCaptureCommandSettingsDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return WebCaptureCommandSettingsDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isBoxColorInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool BoxColorInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfBoxColorInformationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapBoxColorInformationDictionary(*pdfDoc, *value, (SkPdfBoxColorInformationDictionary**)data);
+}
+
+bool BoxColorInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfBoxColorInformationDictionary** data) {
+  if (BoxColorInformationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return BoxColorInformationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isBoxStyleDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool BoxStyleDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfBoxStyleDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapBoxStyleDictionary(*pdfDoc, *value, (SkPdfBoxStyleDictionary**)data);
+}
+
+bool BoxStyleDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfBoxStyleDictionary** data) {
+  if (BoxStyleDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return BoxStyleDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isPrinterMarkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool PrinterMarkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPrinterMarkAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapPrinterMarkAnnotationDictionary(*pdfDoc, *value, (SkPdfPrinterMarkAnnotationDictionary**)data);
+}
+
+bool PrinterMarkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPrinterMarkAnnotationDictionary** data) {
+  if (PrinterMarkAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return PrinterMarkAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isPrinterMarkFormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool PrinterMarkFormDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPrinterMarkFormDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapPrinterMarkFormDictionary(*pdfDoc, *value, (SkPdfPrinterMarkFormDictionary**)data);
+}
+
+bool PrinterMarkFormDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPrinterMarkFormDictionary** data) {
+  if (PrinterMarkFormDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return PrinterMarkFormDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isSeparationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool SeparationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSeparationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapSeparationDictionary(*pdfDoc, *value, (SkPdfSeparationDictionary**)data);
+}
+
+bool SeparationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSeparationDictionary** data) {
+  if (SeparationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return SeparationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isPDF_XOutputIntentDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool PDF_XOutputIntentDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPDF_XOutputIntentDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapPDF_XOutputIntentDictionary(*pdfDoc, *value, (SkPdfPDF_XOutputIntentDictionary**)data);
+}
+
+bool PDF_XOutputIntentDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPDF_XOutputIntentDictionary** data) {
+  if (PDF_XOutputIntentDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return PDF_XOutputIntentDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isTrapNetworkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool TrapNetworkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTrapNetworkAnnotationDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapTrapNetworkAnnotationDictionary(*pdfDoc, *value, (SkPdfTrapNetworkAnnotationDictionary**)data);
+}
+
+bool TrapNetworkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTrapNetworkAnnotationDictionary** data) {
+  if (TrapNetworkAnnotationDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return TrapNetworkAnnotationDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isTrapNetworkAppearanceStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool TrapNetworkAppearanceStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTrapNetworkAppearanceStreamDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapTrapNetworkAppearanceStreamDictionary(*pdfDoc, *value, (SkPdfTrapNetworkAppearanceStreamDictionary**)data);
+}
+
+bool TrapNetworkAppearanceStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTrapNetworkAppearanceStreamDictionary** data) {
+  if (TrapNetworkAppearanceStreamDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return TrapNetworkAppearanceStreamDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isOpiVersionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  return true;
+}
+
+bool OpiVersionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfOpiVersionDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapOpiVersionDictionary(*pdfDoc, *value, (SkPdfOpiVersionDictionary**)data);
+}
+
+bool OpiVersionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfOpiVersionDictionary** data) {
+  if (OpiVersionDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return OpiVersionDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
+bool isMultiMasterFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
+  std::string Subtype;
+  if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
+  if ((Subtype != "MMType1")) return false;
+
+  return true;
+}
+
+bool MultiMasterFontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMultiMasterFontDictionary** data) {
+  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);
+  if (value == NULL) { return false; }
+  if (data == NULL) { return true; }
+  return mapMultiMasterFontDictionary(*pdfDoc, *value, (SkPdfMultiMasterFontDictionary**)data);
+}
+
+bool MultiMasterFontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMultiMasterFontDictionary** data) {
+  if (MultiMasterFontDictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
+  if (abr == NULL || *abr == '\0') return false;
+  return MultiMasterFontDictionaryFromDictionary(pdfDoc, dict, abr, data);
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfPodofoMapper_autogen.h b/experimental/PdfViewer/autogen/SkPdfPodofoMapper_autogen.h
index f4c52b4..c611eb8 100644
--- a/experimental/PdfViewer/autogen/SkPdfPodofoMapper_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfPodofoMapper_autogen.h
@@ -2,3082 +2,900 @@
 #define __DEFINED__SkPdfPodofoMapper
 
 #include "SkPdfHeaders_autogen.h"
-class PodofoMapper {
-public:
-  static bool map(const SkPdfObject& in, SkPdfObject** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfObject** out) {
-    if (!isObject(podofoDoc, podofoObj)) return false;
-
-    if (map(podofoDoc, podofoObj, (SkPdfArray**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfBoolean**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfInteger**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfName**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfNull**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfReference**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfString**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfStream**)out)) return true;
-
-    *out = new SkPdfObject(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfNull** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNull** out) {
-    if (!isNull(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfNull(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfBoolean** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBoolean** out) {
-    if (!isBoolean(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfBoolean(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfInteger** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfInteger** out) {
-    if (!isInteger(podofoDoc, podofoObj)) return false;
-
-    if (map(podofoDoc, podofoObj, (SkPdfNumber**)out)) return true;
-
-    *out = new SkPdfInteger(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfNumber** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNumber** out) {
-    if (!isNumber(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfNumber(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfName** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfName** out) {
-    if (!isName(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfName(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfReference** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfReference** out) {
-    if (!isReference(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfReference(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfArray** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfArray** out) {
-    if (!isArray(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfArray(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfString** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfString** out) {
-    if (!isString(podofoDoc, podofoObj)) return false;
-
-    if (map(podofoDoc, podofoObj, (SkPdfHexString**)out)) return true;
-
-    *out = new SkPdfString(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfHexString** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfHexString** out) {
-    if (!isHexString(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfHexString(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDictionary** out) {
-    if (!isDictionary(podofoDoc, podofoObj)) return false;
-
-    if (map(podofoDoc, podofoObj, (SkPdfALinkAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfAlternateImageDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfAnnotationActionsDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfAppearanceCharacteristicsDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfAppearanceDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfApplicationDataDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfArtifactsDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfAttributeObjectDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfBeadDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfBlockLevelStructureElementsDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfBorderStyleDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfBoxColorInformationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfBoxStyleDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfCIDFontDescriptorDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfCIDSystemInfoDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfCMapDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfCalgrayColorSpaceDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfCalrgbColorSpaceDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfCatalogDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfCcittfaxdecodeFilterDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfCheckboxFieldDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfChoiceFieldDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfComponentsWithMetadataDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfDctdecodeFilterDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfDeviceNColorSpaceDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfDocumentCatalogActionsDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfDocumentInformationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfEmbeddedFileParameterDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfEmbeddedFileStreamDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfEmbeddedFontStreamDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfEncodingDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfEncryptedEmbeddedFileStreamDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfEncryptionCommonDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFDFCatalogDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFDFDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFDFFieldDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFDFFileAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFDFNamedPageReferenceDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFDFPageDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFDFTemplateDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFDFTrailerDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFieldDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFileAttachmentAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFileSpecificationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFileTrailerDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFontDescriptorDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFontDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFormFieldActionsDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFreeTextAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfFunctionCommonDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfGoToActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfGraphicsStateDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfGroupAttributesDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfHideActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfIccProfileStreamDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfIconFitDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfImportDataActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfInkAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfInlineLevelStructureElementsDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfInteractiveFormDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfJavascriptActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfJavascriptDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfJbig2DecodeFilterDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfLabColorSpaceDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfLaunchActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfLineAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfListAttributeDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfLzwdecodeAndFlatedecodeFiltersDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfMacOsFileInformationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfMarkInformationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfMarkedContentReferenceDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfMarkupAnnotationsDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfMetadataStreamDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfMovieActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfMovieActivationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfMovieAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfMovieDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfNameDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfNameTreeNodeDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfNamedActionsDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfNumberTreeNodeDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfObjectReferenceDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfOpiVersionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfOutlineDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfOutlineItemDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfPDF_XOutputIntentDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfPSXobjectDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfPageLabelDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfPageObjectActionsDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfPageObjectDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfPagePieceDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfPageTreeNodeDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfPopUpAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfPrinterMarkAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfPrinterMarkFormDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfRadioButtonFieldDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfReferenceDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfRemoteGoToActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfResetFormActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfResourceDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfRubberStampAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfSeparationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfShadingDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfSignatureDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfSoftMaskDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfSoftMaskImageDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfSoundActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfSoundAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfSoundObjectDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfSourceInformationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfSquareOrCircleAnnotation**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfStandardSecurityHandlerDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfStandardStructureDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfStreamCommonDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfStructureElementAccessDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfStructureElementDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfStructureTreeRootDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfSubmitFormActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfTableAttributesDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfTextAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfTextFieldDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfThreadActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfThreadDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfTransitionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfTransparencyGroupDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfTrapNetworkAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfTrapNetworkAppearanceStreamDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType0FunctionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType10HalftoneDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType16HalftoneDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType1HalftoneDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType1PatternDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType2FunctionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType2PatternDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType3FunctionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType5HalftoneDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType6HalftoneDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfURIActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfURIDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfURLAliasDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfVariableTextFieldDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfViewerPreferencesDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfWebCaptureCommandDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfWebCaptureCommandSettingsDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfWebCaptureDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfWebCaptureImageSetDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfWebCaptureInformationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfWebCapturePageSetDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfWidgetAnnotationDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfWindowsLaunchActionDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfXObjectDictionary**)out)) return true;
-
-    *out = new SkPdfDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfStream** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStream** out) {
-    if (!isStream(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfStream(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfXObjectDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfXObjectDictionary** out) {
-    if (!isXObjectDictionary(podofoDoc, podofoObj)) return false;
-
-    if (map(podofoDoc, podofoObj, (SkPdfImageDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType1FormDictionary**)out)) return true;
-
-    *out = new SkPdfXObjectDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFontDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFontDictionary** out) {
-    if (!isFontDictionary(podofoDoc, podofoObj)) return false;
-
-    if (map(podofoDoc, podofoObj, (SkPdfCIDFontDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType0FontDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType1FontDictionary**)out)) return true;
-
-    *out = new SkPdfFontDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfTrueTypeFontDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTrueTypeFontDictionary** out) {
-    if (!isTrueTypeFontDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfTrueTypeFontDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfStreamCommonDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStreamCommonDictionary** out) {
-    if (!isStreamCommonDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfStreamCommonDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfLzwdecodeAndFlatedecodeFiltersDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfLzwdecodeAndFlatedecodeFiltersDictionary** out) {
-    if (!isLzwdecodeAndFlatedecodeFiltersDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfLzwdecodeAndFlatedecodeFiltersDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfCcittfaxdecodeFilterDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCcittfaxdecodeFilterDictionary** out) {
-    if (!isCcittfaxdecodeFilterDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfCcittfaxdecodeFilterDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfJbig2DecodeFilterDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfJbig2DecodeFilterDictionary** out) {
-    if (!isJbig2DecodeFilterDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfJbig2DecodeFilterDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfDctdecodeFilterDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDctdecodeFilterDictionary** out) {
-    if (!isDctdecodeFilterDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfDctdecodeFilterDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFileTrailerDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFileTrailerDictionary** out) {
-    if (!isFileTrailerDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFileTrailerDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfEncryptionCommonDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEncryptionCommonDictionary** out) {
-    if (!isEncryptionCommonDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfEncryptionCommonDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfStandardSecurityHandlerDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStandardSecurityHandlerDictionary** out) {
-    if (!isStandardSecurityHandlerDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfStandardSecurityHandlerDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfCatalogDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCatalogDictionary** out) {
-    if (!isCatalogDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfCatalogDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfPageTreeNodeDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPageTreeNodeDictionary** out) {
-    if (!isPageTreeNodeDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfPageTreeNodeDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfPageObjectDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPageObjectDictionary** out) {
-    if (!isPageObjectDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfPageObjectDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfNameDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNameDictionary** out) {
-    if (!isNameDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfNameDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfResourceDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfResourceDictionary** out) {
-    if (!isResourceDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfResourceDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfNameTreeNodeDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNameTreeNodeDictionary** out) {
-    if (!isNameTreeNodeDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfNameTreeNodeDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfNumberTreeNodeDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNumberTreeNodeDictionary** out) {
-    if (!isNumberTreeNodeDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfNumberTreeNodeDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFunctionCommonDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFunctionCommonDictionary** out) {
-    if (!isFunctionCommonDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFunctionCommonDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType0FunctionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType0FunctionDictionary** out) {
-    if (!isType0FunctionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType0FunctionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType2FunctionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType2FunctionDictionary** out) {
-    if (!isType2FunctionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType2FunctionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType3FunctionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType3FunctionDictionary** out) {
-    if (!isType3FunctionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType3FunctionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFileSpecificationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFileSpecificationDictionary** out) {
-    if (!isFileSpecificationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFileSpecificationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfEmbeddedFileStreamDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEmbeddedFileStreamDictionary** out) {
-    if (!isEmbeddedFileStreamDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfEmbeddedFileStreamDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfEmbeddedFileParameterDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEmbeddedFileParameterDictionary** out) {
-    if (!isEmbeddedFileParameterDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfEmbeddedFileParameterDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfMacOsFileInformationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMacOsFileInformationDictionary** out) {
-    if (!isMacOsFileInformationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfMacOsFileInformationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfGraphicsStateDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfGraphicsStateDictionary** out) {
-    if (!isGraphicsStateDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfGraphicsStateDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfCalgrayColorSpaceDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCalgrayColorSpaceDictionary** out) {
-    if (!isCalgrayColorSpaceDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfCalgrayColorSpaceDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfCalrgbColorSpaceDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCalrgbColorSpaceDictionary** out) {
-    if (!isCalrgbColorSpaceDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfCalrgbColorSpaceDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfLabColorSpaceDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfLabColorSpaceDictionary** out) {
-    if (!isLabColorSpaceDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfLabColorSpaceDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfIccProfileStreamDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfIccProfileStreamDictionary** out) {
-    if (!isIccProfileStreamDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfIccProfileStreamDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfDeviceNColorSpaceDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDeviceNColorSpaceDictionary** out) {
-    if (!isDeviceNColorSpaceDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfDeviceNColorSpaceDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType1PatternDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1PatternDictionary** out) {
-    if (!isType1PatternDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType1PatternDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType2PatternDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType2PatternDictionary** out) {
-    if (!isType2PatternDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType2PatternDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfShadingDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfShadingDictionary** out) {
-    if (!isShadingDictionary(podofoDoc, podofoObj)) return false;
-
-    if (map(podofoDoc, podofoObj, (SkPdfType1ShadingDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType2ShadingDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType3ShadingDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType4ShadingDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType5ShadingDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType6ShadingDictionary**)out)) return true;
-
-    *out = new SkPdfShadingDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType1ShadingDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1ShadingDictionary** out) {
-    if (!isType1ShadingDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType1ShadingDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType2ShadingDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType2ShadingDictionary** out) {
-    if (!isType2ShadingDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType2ShadingDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType3ShadingDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType3ShadingDictionary** out) {
-    if (!isType3ShadingDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType3ShadingDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType4ShadingDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType4ShadingDictionary** out) {
-    if (!isType4ShadingDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType4ShadingDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType5ShadingDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType5ShadingDictionary** out) {
-    if (!isType5ShadingDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType5ShadingDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType6ShadingDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType6ShadingDictionary** out) {
-    if (!isType6ShadingDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType6ShadingDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfImageDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfImageDictionary** out) {
-    if (!isImageDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfImageDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfAlternateImageDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAlternateImageDictionary** out) {
-    if (!isAlternateImageDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfAlternateImageDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType1FormDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1FormDictionary** out) {
-    if (!isType1FormDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType1FormDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfGroupAttributesDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfGroupAttributesDictionary** out) {
-    if (!isGroupAttributesDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfGroupAttributesDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfReferenceDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfReferenceDictionary** out) {
-    if (!isReferenceDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfReferenceDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfPSXobjectDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPSXobjectDictionary** out) {
-    if (!isPSXobjectDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfPSXobjectDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType1FontDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1FontDictionary** out) {
-    if (!isType1FontDictionary(podofoDoc, podofoObj)) return false;
-
-    if (map(podofoDoc, podofoObj, (SkPdfMultiMasterFontDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfTrueTypeFontDictionary**)out)) return true;
-    if (map(podofoDoc, podofoObj, (SkPdfType3FontDictionary**)out)) return true;
-
-    *out = new SkPdfType1FontDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType3FontDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType3FontDictionary** out) {
-    if (!isType3FontDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType3FontDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfEncodingDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEncodingDictionary** out) {
-    if (!isEncodingDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfEncodingDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfCIDSystemInfoDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCIDSystemInfoDictionary** out) {
-    if (!isCIDSystemInfoDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfCIDSystemInfoDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfCIDFontDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCIDFontDictionary** out) {
-    if (!isCIDFontDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfCIDFontDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfCMapDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCMapDictionary** out) {
-    if (!isCMapDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfCMapDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType0FontDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType0FontDictionary** out) {
-    if (!isType0FontDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType0FontDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFontDescriptorDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFontDescriptorDictionary** out) {
-    if (!isFontDescriptorDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFontDescriptorDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfCIDFontDescriptorDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCIDFontDescriptorDictionary** out) {
-    if (!isCIDFontDescriptorDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfCIDFontDescriptorDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfEmbeddedFontStreamDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEmbeddedFontStreamDictionary** out) {
-    if (!isEmbeddedFontStreamDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfEmbeddedFontStreamDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType1HalftoneDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1HalftoneDictionary** out) {
-    if (!isType1HalftoneDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType1HalftoneDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType6HalftoneDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType6HalftoneDictionary** out) {
-    if (!isType6HalftoneDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType6HalftoneDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType10HalftoneDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType10HalftoneDictionary** out) {
-    if (!isType10HalftoneDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType10HalftoneDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType16HalftoneDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType16HalftoneDictionary** out) {
-    if (!isType16HalftoneDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType16HalftoneDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfType5HalftoneDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType5HalftoneDictionary** out) {
-    if (!isType5HalftoneDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfType5HalftoneDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfSoftMaskDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoftMaskDictionary** out) {
-    if (!isSoftMaskDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfSoftMaskDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfSoftMaskImageDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoftMaskImageDictionary** out) {
-    if (!isSoftMaskImageDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfSoftMaskImageDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfTransparencyGroupDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTransparencyGroupDictionary** out) {
-    if (!isTransparencyGroupDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfTransparencyGroupDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfViewerPreferencesDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfViewerPreferencesDictionary** out) {
-    if (!isViewerPreferencesDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfViewerPreferencesDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfOutlineDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfOutlineDictionary** out) {
-    if (!isOutlineDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfOutlineDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfOutlineItemDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfOutlineItemDictionary** out) {
-    if (!isOutlineItemDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfOutlineItemDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfPageLabelDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPageLabelDictionary** out) {
-    if (!isPageLabelDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfPageLabelDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfThreadDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfThreadDictionary** out) {
-    if (!isThreadDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfThreadDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfBeadDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBeadDictionary** out) {
-    if (!isBeadDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfBeadDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfTransitionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTransitionDictionary** out) {
-    if (!isTransitionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfTransitionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAnnotationDictionary** out) {
-    if (!isAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfBorderStyleDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBorderStyleDictionary** out) {
-    if (!isBorderStyleDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfBorderStyleDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfAppearanceDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAppearanceDictionary** out) {
-    if (!isAppearanceDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfAppearanceDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfTextAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTextAnnotationDictionary** out) {
-    if (!isTextAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfTextAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfALinkAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfALinkAnnotationDictionary** out) {
-    if (!isALinkAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfALinkAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFreeTextAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFreeTextAnnotationDictionary** out) {
-    if (!isFreeTextAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFreeTextAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfLineAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfLineAnnotationDictionary** out) {
-    if (!isLineAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfLineAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfSquareOrCircleAnnotation** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSquareOrCircleAnnotation** out) {
-    if (!isSquareOrCircleAnnotation(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfSquareOrCircleAnnotation(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfMarkupAnnotationsDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMarkupAnnotationsDictionary** out) {
-    if (!isMarkupAnnotationsDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfMarkupAnnotationsDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfRubberStampAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfRubberStampAnnotationDictionary** out) {
-    if (!isRubberStampAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfRubberStampAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfInkAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfInkAnnotationDictionary** out) {
-    if (!isInkAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfInkAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfPopUpAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPopUpAnnotationDictionary** out) {
-    if (!isPopUpAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfPopUpAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFileAttachmentAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFileAttachmentAnnotationDictionary** out) {
-    if (!isFileAttachmentAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFileAttachmentAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfSoundAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoundAnnotationDictionary** out) {
-    if (!isSoundAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfSoundAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfMovieAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMovieAnnotationDictionary** out) {
-    if (!isMovieAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfMovieAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfWidgetAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWidgetAnnotationDictionary** out) {
-    if (!isWidgetAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfWidgetAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfActionDictionary** out) {
-    if (!isActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfAnnotationActionsDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAnnotationActionsDictionary** out) {
-    if (!isAnnotationActionsDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfAnnotationActionsDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfPageObjectActionsDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPageObjectActionsDictionary** out) {
-    if (!isPageObjectActionsDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfPageObjectActionsDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFormFieldActionsDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFormFieldActionsDictionary** out) {
-    if (!isFormFieldActionsDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFormFieldActionsDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfDocumentCatalogActionsDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDocumentCatalogActionsDictionary** out) {
-    if (!isDocumentCatalogActionsDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfDocumentCatalogActionsDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfGoToActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfGoToActionDictionary** out) {
-    if (!isGoToActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfGoToActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfRemoteGoToActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfRemoteGoToActionDictionary** out) {
-    if (!isRemoteGoToActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfRemoteGoToActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfLaunchActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfLaunchActionDictionary** out) {
-    if (!isLaunchActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfLaunchActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfWindowsLaunchActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWindowsLaunchActionDictionary** out) {
-    if (!isWindowsLaunchActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfWindowsLaunchActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfThreadActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfThreadActionDictionary** out) {
-    if (!isThreadActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfThreadActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfURIActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfURIActionDictionary** out) {
-    if (!isURIActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfURIActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfURIDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfURIDictionary** out) {
-    if (!isURIDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfURIDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfSoundActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoundActionDictionary** out) {
-    if (!isSoundActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfSoundActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfMovieActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMovieActionDictionary** out) {
-    if (!isMovieActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfMovieActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfHideActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfHideActionDictionary** out) {
-    if (!isHideActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfHideActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfNamedActionsDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNamedActionsDictionary** out) {
-    if (!isNamedActionsDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfNamedActionsDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfInteractiveFormDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfInteractiveFormDictionary** out) {
-    if (!isInteractiveFormDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfInteractiveFormDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFieldDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFieldDictionary** out) {
-    if (!isFieldDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFieldDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfVariableTextFieldDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfVariableTextFieldDictionary** out) {
-    if (!isVariableTextFieldDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfVariableTextFieldDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfAppearanceCharacteristicsDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAppearanceCharacteristicsDictionary** out) {
-    if (!isAppearanceCharacteristicsDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfAppearanceCharacteristicsDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfCheckboxFieldDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCheckboxFieldDictionary** out) {
-    if (!isCheckboxFieldDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfCheckboxFieldDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfRadioButtonFieldDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfRadioButtonFieldDictionary** out) {
-    if (!isRadioButtonFieldDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfRadioButtonFieldDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfTextFieldDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTextFieldDictionary** out) {
-    if (!isTextFieldDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfTextFieldDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfChoiceFieldDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfChoiceFieldDictionary** out) {
-    if (!isChoiceFieldDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfChoiceFieldDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfSignatureDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSignatureDictionary** out) {
-    if (!isSignatureDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfSignatureDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfSubmitFormActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSubmitFormActionDictionary** out) {
-    if (!isSubmitFormActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfSubmitFormActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfResetFormActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfResetFormActionDictionary** out) {
-    if (!isResetFormActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfResetFormActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfImportDataActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfImportDataActionDictionary** out) {
-    if (!isImportDataActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfImportDataActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfJavascriptActionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfJavascriptActionDictionary** out) {
-    if (!isJavascriptActionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfJavascriptActionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFDFTrailerDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFTrailerDictionary** out) {
-    if (!isFDFTrailerDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFDFTrailerDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFDFCatalogDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFCatalogDictionary** out) {
-    if (!isFDFCatalogDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFDFCatalogDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFDFDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFDictionary** out) {
-    if (!isFDFDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFDFDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfEncryptedEmbeddedFileStreamDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEncryptedEmbeddedFileStreamDictionary** out) {
-    if (!isEncryptedEmbeddedFileStreamDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfEncryptedEmbeddedFileStreamDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfJavascriptDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfJavascriptDictionary** out) {
-    if (!isJavascriptDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfJavascriptDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFDFFieldDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFFieldDictionary** out) {
-    if (!isFDFFieldDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFDFFieldDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfIconFitDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfIconFitDictionary** out) {
-    if (!isIconFitDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfIconFitDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFDFPageDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFPageDictionary** out) {
-    if (!isFDFPageDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFDFPageDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFDFTemplateDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFTemplateDictionary** out) {
-    if (!isFDFTemplateDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFDFTemplateDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFDFNamedPageReferenceDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFNamedPageReferenceDictionary** out) {
-    if (!isFDFNamedPageReferenceDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFDFNamedPageReferenceDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfFDFFileAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFFileAnnotationDictionary** out) {
-    if (!isFDFFileAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfFDFFileAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfSoundObjectDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoundObjectDictionary** out) {
-    if (!isSoundObjectDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfSoundObjectDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfMovieDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMovieDictionary** out) {
-    if (!isMovieDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfMovieDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfMovieActivationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMovieActivationDictionary** out) {
-    if (!isMovieActivationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfMovieActivationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfDocumentInformationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDocumentInformationDictionary** out) {
-    if (!isDocumentInformationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfDocumentInformationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfMetadataStreamDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMetadataStreamDictionary** out) {
-    if (!isMetadataStreamDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfMetadataStreamDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfComponentsWithMetadataDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfComponentsWithMetadataDictionary** out) {
-    if (!isComponentsWithMetadataDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfComponentsWithMetadataDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfPagePieceDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPagePieceDictionary** out) {
-    if (!isPagePieceDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfPagePieceDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfApplicationDataDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfApplicationDataDictionary** out) {
-    if (!isApplicationDataDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfApplicationDataDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfStructureTreeRootDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStructureTreeRootDictionary** out) {
-    if (!isStructureTreeRootDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfStructureTreeRootDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfStructureElementDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStructureElementDictionary** out) {
-    if (!isStructureElementDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfStructureElementDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfMarkedContentReferenceDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMarkedContentReferenceDictionary** out) {
-    if (!isMarkedContentReferenceDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfMarkedContentReferenceDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfObjectReferenceDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfObjectReferenceDictionary** out) {
-    if (!isObjectReferenceDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfObjectReferenceDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfStructureElementAccessDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStructureElementAccessDictionary** out) {
-    if (!isStructureElementAccessDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfStructureElementAccessDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfAttributeObjectDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAttributeObjectDictionary** out) {
-    if (!isAttributeObjectDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfAttributeObjectDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfMarkInformationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMarkInformationDictionary** out) {
-    if (!isMarkInformationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfMarkInformationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfArtifactsDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfArtifactsDictionary** out) {
-    if (!isArtifactsDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfArtifactsDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfStandardStructureDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStandardStructureDictionary** out) {
-    if (!isStandardStructureDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfStandardStructureDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfBlockLevelStructureElementsDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBlockLevelStructureElementsDictionary** out) {
-    if (!isBlockLevelStructureElementsDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfBlockLevelStructureElementsDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfInlineLevelStructureElementsDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfInlineLevelStructureElementsDictionary** out) {
-    if (!isInlineLevelStructureElementsDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfInlineLevelStructureElementsDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfListAttributeDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfListAttributeDictionary** out) {
-    if (!isListAttributeDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfListAttributeDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfTableAttributesDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTableAttributesDictionary** out) {
-    if (!isTableAttributesDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfTableAttributesDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfWebCaptureInformationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureInformationDictionary** out) {
-    if (!isWebCaptureInformationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfWebCaptureInformationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfWebCaptureDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureDictionary** out) {
-    if (!isWebCaptureDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfWebCaptureDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfWebCapturePageSetDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCapturePageSetDictionary** out) {
-    if (!isWebCapturePageSetDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfWebCapturePageSetDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfWebCaptureImageSetDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureImageSetDictionary** out) {
-    if (!isWebCaptureImageSetDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfWebCaptureImageSetDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfSourceInformationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSourceInformationDictionary** out) {
-    if (!isSourceInformationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfSourceInformationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfURLAliasDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfURLAliasDictionary** out) {
-    if (!isURLAliasDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfURLAliasDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfWebCaptureCommandDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureCommandDictionary** out) {
-    if (!isWebCaptureCommandDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfWebCaptureCommandDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfWebCaptureCommandSettingsDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureCommandSettingsDictionary** out) {
-    if (!isWebCaptureCommandSettingsDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfWebCaptureCommandSettingsDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfBoxColorInformationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBoxColorInformationDictionary** out) {
-    if (!isBoxColorInformationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfBoxColorInformationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfBoxStyleDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBoxStyleDictionary** out) {
-    if (!isBoxStyleDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfBoxStyleDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfPrinterMarkAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPrinterMarkAnnotationDictionary** out) {
-    if (!isPrinterMarkAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfPrinterMarkAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfPrinterMarkFormDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPrinterMarkFormDictionary** out) {
-    if (!isPrinterMarkFormDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfPrinterMarkFormDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfSeparationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSeparationDictionary** out) {
-    if (!isSeparationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfSeparationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfPDF_XOutputIntentDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPDF_XOutputIntentDictionary** out) {
-    if (!isPDF_XOutputIntentDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfPDF_XOutputIntentDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfTrapNetworkAnnotationDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTrapNetworkAnnotationDictionary** out) {
-    if (!isTrapNetworkAnnotationDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfTrapNetworkAnnotationDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfTrapNetworkAppearanceStreamDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTrapNetworkAppearanceStreamDictionary** out) {
-    if (!isTrapNetworkAppearanceStreamDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfTrapNetworkAppearanceStreamDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfOpiVersionDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfOpiVersionDictionary** out) {
-    if (!isOpiVersionDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfOpiVersionDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool map(const SkPdfObject& in, SkPdfMultiMasterFontDictionary** out) {
-    return map(*in.doc(), *in.podofo(), out);
-  }
-
-  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMultiMasterFontDictionary** out) {
-    if (!isMultiMasterFontDictionary(podofoDoc, podofoObj)) return false;
-
-
-    *out = new SkPdfMultiMasterFontDictionary(&podofoDoc, &podofoObj);
-    return true;
-  }
-
-  static bool isObject(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isNull(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return podofoObj.GetDataType() == ePdfDataType_Null;
-  }
-
-  static bool isBoolean(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return podofoObj.GetDataType() == ePdfDataType_Bool;
-  }
-
-  static bool isInteger(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return podofoObj.GetDataType() == ePdfDataType_Number || podofoObj.GetDataType() == ePdfDataType_Real;
-  }
-
-  static bool isNumber(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return podofoObj.GetDataType() == ePdfDataType_Number || podofoObj.GetDataType() == ePdfDataType_Real;
-  }
-
-  static bool isName(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return podofoObj.GetDataType() == ePdfDataType_Name;
-  }
-
-  static bool isReference(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return podofoObj.GetDataType() == ePdfDataType_Reference;
-  }
-
-  static bool isArray(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return podofoObj.GetDataType() == ePdfDataType_Array;
-  }
-
-  static bool isString(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return podofoObj.GetDataType() == ePdfDataType_String || podofoObj.GetDataType() == ePdfDataType_HexString;
-  }
-
-  static bool isHexString(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return podofoObj.GetDataType() == ePdfDataType_HexString;
-  }
-
-  static bool isDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return podofoObj.GetDataType() == ePdfDataType_Dictionary;
-  }
-
-  static bool isStream(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isXObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isTrueTypeFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    std::string Subtype;
-    if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
-    if ((Subtype != "TrueType")) return false;
-
-    return true;
-  }
-
-  static bool isStreamCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isLzwdecodeAndFlatedecodeFiltersDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isCcittfaxdecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isJbig2DecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isDctdecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFileTrailerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isEncryptionCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isStandardSecurityHandlerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isCatalogDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isPageTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isPageObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isNameDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isResourceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isNameTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isNumberTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFunctionCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType0FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType2FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType3FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFileSpecificationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isEmbeddedFileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isEmbeddedFileParameterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isMacOsFileInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isGraphicsStateDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isCalgrayColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isCalrgbColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isLabColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isIccProfileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isDeviceNColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType1PatternDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType2PatternDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType1ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType2ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType3ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType4ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType5ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType6ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    std::string Subtype;
-    if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
-    if ((Subtype != "Image")) return false;
-
-    return true;
-  }
-
-  static bool isAlternateImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType1FormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    std::string Subtype;
-    if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
-    if ((Subtype != "Form")) return false;
-
-    return true;
-  }
-
-  static bool isGroupAttributesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isPSXobjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType1FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    std::string Subtype;
-    if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
-    if ((Subtype != "MMType1") && (Subtype != "TrueType") && (Subtype != "Type3") && (Subtype != "Type1")) return false;
-
-    return true;
-  }
-
-  static bool isType3FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    std::string Subtype;
-    if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
-    if ((Subtype != "Type3")) return false;
-
-    return true;
-  }
-
-  static bool isEncodingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isCIDSystemInfoDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isCIDFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    std::string Subtype;
-    if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
-    if ((Subtype != "CIDFontType0") && (Subtype != "CIDFontType2")) return false;
-
-    return true;
-  }
-
-  static bool isCMapDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType0FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    std::string Subtype;
-    if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
-    if ((Subtype != "Type0")) return false;
-
-    return true;
-  }
-
-  static bool isFontDescriptorDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isCIDFontDescriptorDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isEmbeddedFontStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType1HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType6HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType10HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType16HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isType5HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isSoftMaskDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isSoftMaskImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isTransparencyGroupDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isViewerPreferencesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isOutlineDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isOutlineItemDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isPageLabelDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isThreadDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isBeadDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isTransitionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isBorderStyleDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isAppearanceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isTextAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isALinkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFreeTextAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isLineAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isSquareOrCircleAnnotation(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isMarkupAnnotationsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isRubberStampAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isInkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isPopUpAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFileAttachmentAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isSoundAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isMovieAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isWidgetAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isAnnotationActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isPageObjectActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFormFieldActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isDocumentCatalogActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isGoToActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isRemoteGoToActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isLaunchActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isWindowsLaunchActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isThreadActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isURIActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isURIDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isSoundActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isMovieActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isHideActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isNamedActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isInteractiveFormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isVariableTextFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isAppearanceCharacteristicsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isCheckboxFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isRadioButtonFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isTextFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isChoiceFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isSignatureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isSubmitFormActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isResetFormActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isImportDataActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isJavascriptActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFDFTrailerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFDFCatalogDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFDFDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isEncryptedEmbeddedFileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isJavascriptDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFDFFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isIconFitDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFDFPageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFDFTemplateDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFDFNamedPageReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isFDFFileAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isSoundObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isMovieDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isMovieActivationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isDocumentInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isMetadataStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isComponentsWithMetadataDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isPagePieceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isApplicationDataDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isStructureTreeRootDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isStructureElementDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isMarkedContentReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isObjectReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isStructureElementAccessDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isAttributeObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isMarkInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isArtifactsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isStandardStructureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isBlockLevelStructureElementsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isInlineLevelStructureElementsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isListAttributeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isTableAttributesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isWebCaptureInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isWebCaptureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isWebCapturePageSetDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isWebCaptureImageSetDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isSourceInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isURLAliasDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isWebCaptureCommandDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isWebCaptureCommandSettingsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isBoxColorInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isBoxStyleDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isPrinterMarkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isPrinterMarkFormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isSeparationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isPDF_XOutputIntentDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isTrapNetworkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isTrapNetworkAppearanceStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isOpiVersionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    return true;
-  }
-
-  static bool isMultiMasterFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {
-    std::string Subtype;
-    if (!NameFromDictionary(&podofoDoc, podofoObj.GetDictionary(), "Subtype", "", &Subtype)) return false;
-    if ((Subtype != "MMType1")) return false;
-
-    return true;
-  }
-
-};
+bool mapObject(const SkPdfObject& in, SkPdfObject** out);
+bool mapObject(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfObject** out);
+bool mapNull(const SkPdfObject& in, SkPdfNull** out);
+bool mapNull(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNull** out);
+bool mapBoolean(const SkPdfObject& in, SkPdfBoolean** out);
+bool mapBoolean(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBoolean** out);
+bool mapInteger(const SkPdfObject& in, SkPdfInteger** out);
+bool mapInteger(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfInteger** out);
+bool mapNumber(const SkPdfObject& in, SkPdfNumber** out);
+bool mapNumber(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNumber** out);
+bool mapName(const SkPdfObject& in, SkPdfName** out);
+bool mapName(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfName** out);
+bool mapReference(const SkPdfObject& in, SkPdfReference** out);
+bool mapReference(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfReference** out);
+bool mapArray(const SkPdfObject& in, SkPdfArray** out);
+bool mapArray(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfArray** out);
+bool mapString(const SkPdfObject& in, SkPdfString** out);
+bool mapString(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfString** out);
+bool mapHexString(const SkPdfObject& in, SkPdfHexString** out);
+bool mapHexString(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfHexString** out);
+bool mapDictionary(const SkPdfObject& in, SkPdfDictionary** out);
+bool mapDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDictionary** out);
+bool mapStream(const SkPdfObject& in, SkPdfStream** out);
+bool mapStream(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStream** out);
+bool mapXObjectDictionary(const SkPdfObject& in, SkPdfXObjectDictionary** out);
+bool mapXObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfXObjectDictionary** out);
+bool mapFontDictionary(const SkPdfObject& in, SkPdfFontDictionary** out);
+bool mapFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFontDictionary** out);
+bool mapTrueTypeFontDictionary(const SkPdfObject& in, SkPdfTrueTypeFontDictionary** out);
+bool mapTrueTypeFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTrueTypeFontDictionary** out);
+bool mapStreamCommonDictionary(const SkPdfObject& in, SkPdfStreamCommonDictionary** out);
+bool mapStreamCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStreamCommonDictionary** out);
+bool mapLzwdecodeAndFlatedecodeFiltersDictionary(const SkPdfObject& in, SkPdfLzwdecodeAndFlatedecodeFiltersDictionary** out);
+bool mapLzwdecodeAndFlatedecodeFiltersDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfLzwdecodeAndFlatedecodeFiltersDictionary** out);
+bool mapCcittfaxdecodeFilterDictionary(const SkPdfObject& in, SkPdfCcittfaxdecodeFilterDictionary** out);
+bool mapCcittfaxdecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCcittfaxdecodeFilterDictionary** out);
+bool mapJbig2DecodeFilterDictionary(const SkPdfObject& in, SkPdfJbig2DecodeFilterDictionary** out);
+bool mapJbig2DecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfJbig2DecodeFilterDictionary** out);
+bool mapDctdecodeFilterDictionary(const SkPdfObject& in, SkPdfDctdecodeFilterDictionary** out);
+bool mapDctdecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDctdecodeFilterDictionary** out);
+bool mapFileTrailerDictionary(const SkPdfObject& in, SkPdfFileTrailerDictionary** out);
+bool mapFileTrailerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFileTrailerDictionary** out);
+bool mapEncryptionCommonDictionary(const SkPdfObject& in, SkPdfEncryptionCommonDictionary** out);
+bool mapEncryptionCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEncryptionCommonDictionary** out);
+bool mapStandardSecurityHandlerDictionary(const SkPdfObject& in, SkPdfStandardSecurityHandlerDictionary** out);
+bool mapStandardSecurityHandlerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStandardSecurityHandlerDictionary** out);
+bool mapCatalogDictionary(const SkPdfObject& in, SkPdfCatalogDictionary** out);
+bool mapCatalogDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCatalogDictionary** out);
+bool mapPageTreeNodeDictionary(const SkPdfObject& in, SkPdfPageTreeNodeDictionary** out);
+bool mapPageTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPageTreeNodeDictionary** out);
+bool mapPageObjectDictionary(const SkPdfObject& in, SkPdfPageObjectDictionary** out);
+bool mapPageObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPageObjectDictionary** out);
+bool mapNameDictionary(const SkPdfObject& in, SkPdfNameDictionary** out);
+bool mapNameDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNameDictionary** out);
+bool mapResourceDictionary(const SkPdfObject& in, SkPdfResourceDictionary** out);
+bool mapResourceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfResourceDictionary** out);
+bool mapNameTreeNodeDictionary(const SkPdfObject& in, SkPdfNameTreeNodeDictionary** out);
+bool mapNameTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNameTreeNodeDictionary** out);
+bool mapNumberTreeNodeDictionary(const SkPdfObject& in, SkPdfNumberTreeNodeDictionary** out);
+bool mapNumberTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNumberTreeNodeDictionary** out);
+bool mapFunctionCommonDictionary(const SkPdfObject& in, SkPdfFunctionCommonDictionary** out);
+bool mapFunctionCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFunctionCommonDictionary** out);
+bool mapType0FunctionDictionary(const SkPdfObject& in, SkPdfType0FunctionDictionary** out);
+bool mapType0FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType0FunctionDictionary** out);
+bool mapType2FunctionDictionary(const SkPdfObject& in, SkPdfType2FunctionDictionary** out);
+bool mapType2FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType2FunctionDictionary** out);
+bool mapType3FunctionDictionary(const SkPdfObject& in, SkPdfType3FunctionDictionary** out);
+bool mapType3FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType3FunctionDictionary** out);
+bool mapFileSpecificationDictionary(const SkPdfObject& in, SkPdfFileSpecificationDictionary** out);
+bool mapFileSpecificationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFileSpecificationDictionary** out);
+bool mapEmbeddedFileStreamDictionary(const SkPdfObject& in, SkPdfEmbeddedFileStreamDictionary** out);
+bool mapEmbeddedFileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEmbeddedFileStreamDictionary** out);
+bool mapEmbeddedFileParameterDictionary(const SkPdfObject& in, SkPdfEmbeddedFileParameterDictionary** out);
+bool mapEmbeddedFileParameterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEmbeddedFileParameterDictionary** out);
+bool mapMacOsFileInformationDictionary(const SkPdfObject& in, SkPdfMacOsFileInformationDictionary** out);
+bool mapMacOsFileInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMacOsFileInformationDictionary** out);
+bool mapGraphicsStateDictionary(const SkPdfObject& in, SkPdfGraphicsStateDictionary** out);
+bool mapGraphicsStateDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfGraphicsStateDictionary** out);
+bool mapCalgrayColorSpaceDictionary(const SkPdfObject& in, SkPdfCalgrayColorSpaceDictionary** out);
+bool mapCalgrayColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCalgrayColorSpaceDictionary** out);
+bool mapCalrgbColorSpaceDictionary(const SkPdfObject& in, SkPdfCalrgbColorSpaceDictionary** out);
+bool mapCalrgbColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCalrgbColorSpaceDictionary** out);
+bool mapLabColorSpaceDictionary(const SkPdfObject& in, SkPdfLabColorSpaceDictionary** out);
+bool mapLabColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfLabColorSpaceDictionary** out);
+bool mapIccProfileStreamDictionary(const SkPdfObject& in, SkPdfIccProfileStreamDictionary** out);
+bool mapIccProfileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfIccProfileStreamDictionary** out);
+bool mapDeviceNColorSpaceDictionary(const SkPdfObject& in, SkPdfDeviceNColorSpaceDictionary** out);
+bool mapDeviceNColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDeviceNColorSpaceDictionary** out);
+bool mapType1PatternDictionary(const SkPdfObject& in, SkPdfType1PatternDictionary** out);
+bool mapType1PatternDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1PatternDictionary** out);
+bool mapType2PatternDictionary(const SkPdfObject& in, SkPdfType2PatternDictionary** out);
+bool mapType2PatternDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType2PatternDictionary** out);
+bool mapShadingDictionary(const SkPdfObject& in, SkPdfShadingDictionary** out);
+bool mapShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfShadingDictionary** out);
+bool mapType1ShadingDictionary(const SkPdfObject& in, SkPdfType1ShadingDictionary** out);
+bool mapType1ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1ShadingDictionary** out);
+bool mapType2ShadingDictionary(const SkPdfObject& in, SkPdfType2ShadingDictionary** out);
+bool mapType2ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType2ShadingDictionary** out);
+bool mapType3ShadingDictionary(const SkPdfObject& in, SkPdfType3ShadingDictionary** out);
+bool mapType3ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType3ShadingDictionary** out);
+bool mapType4ShadingDictionary(const SkPdfObject& in, SkPdfType4ShadingDictionary** out);
+bool mapType4ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType4ShadingDictionary** out);
+bool mapType5ShadingDictionary(const SkPdfObject& in, SkPdfType5ShadingDictionary** out);
+bool mapType5ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType5ShadingDictionary** out);
+bool mapType6ShadingDictionary(const SkPdfObject& in, SkPdfType6ShadingDictionary** out);
+bool mapType6ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType6ShadingDictionary** out);
+bool mapImageDictionary(const SkPdfObject& in, SkPdfImageDictionary** out);
+bool mapImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfImageDictionary** out);
+bool mapAlternateImageDictionary(const SkPdfObject& in, SkPdfAlternateImageDictionary** out);
+bool mapAlternateImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAlternateImageDictionary** out);
+bool mapType1FormDictionary(const SkPdfObject& in, SkPdfType1FormDictionary** out);
+bool mapType1FormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1FormDictionary** out);
+bool mapGroupAttributesDictionary(const SkPdfObject& in, SkPdfGroupAttributesDictionary** out);
+bool mapGroupAttributesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfGroupAttributesDictionary** out);
+bool mapReferenceDictionary(const SkPdfObject& in, SkPdfReferenceDictionary** out);
+bool mapReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfReferenceDictionary** out);
+bool mapPSXobjectDictionary(const SkPdfObject& in, SkPdfPSXobjectDictionary** out);
+bool mapPSXobjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPSXobjectDictionary** out);
+bool mapType1FontDictionary(const SkPdfObject& in, SkPdfType1FontDictionary** out);
+bool mapType1FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1FontDictionary** out);
+bool mapType3FontDictionary(const SkPdfObject& in, SkPdfType3FontDictionary** out);
+bool mapType3FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType3FontDictionary** out);
+bool mapEncodingDictionary(const SkPdfObject& in, SkPdfEncodingDictionary** out);
+bool mapEncodingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEncodingDictionary** out);
+bool mapCIDSystemInfoDictionary(const SkPdfObject& in, SkPdfCIDSystemInfoDictionary** out);
+bool mapCIDSystemInfoDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCIDSystemInfoDictionary** out);
+bool mapCIDFontDictionary(const SkPdfObject& in, SkPdfCIDFontDictionary** out);
+bool mapCIDFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCIDFontDictionary** out);
+bool mapCMapDictionary(const SkPdfObject& in, SkPdfCMapDictionary** out);
+bool mapCMapDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCMapDictionary** out);
+bool mapType0FontDictionary(const SkPdfObject& in, SkPdfType0FontDictionary** out);
+bool mapType0FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType0FontDictionary** out);
+bool mapFontDescriptorDictionary(const SkPdfObject& in, SkPdfFontDescriptorDictionary** out);
+bool mapFontDescriptorDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFontDescriptorDictionary** out);
+bool mapCIDFontDescriptorDictionary(const SkPdfObject& in, SkPdfCIDFontDescriptorDictionary** out);
+bool mapCIDFontDescriptorDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCIDFontDescriptorDictionary** out);
+bool mapEmbeddedFontStreamDictionary(const SkPdfObject& in, SkPdfEmbeddedFontStreamDictionary** out);
+bool mapEmbeddedFontStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEmbeddedFontStreamDictionary** out);
+bool mapType1HalftoneDictionary(const SkPdfObject& in, SkPdfType1HalftoneDictionary** out);
+bool mapType1HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType1HalftoneDictionary** out);
+bool mapType6HalftoneDictionary(const SkPdfObject& in, SkPdfType6HalftoneDictionary** out);
+bool mapType6HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType6HalftoneDictionary** out);
+bool mapType10HalftoneDictionary(const SkPdfObject& in, SkPdfType10HalftoneDictionary** out);
+bool mapType10HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType10HalftoneDictionary** out);
+bool mapType16HalftoneDictionary(const SkPdfObject& in, SkPdfType16HalftoneDictionary** out);
+bool mapType16HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType16HalftoneDictionary** out);
+bool mapType5HalftoneDictionary(const SkPdfObject& in, SkPdfType5HalftoneDictionary** out);
+bool mapType5HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfType5HalftoneDictionary** out);
+bool mapSoftMaskDictionary(const SkPdfObject& in, SkPdfSoftMaskDictionary** out);
+bool mapSoftMaskDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoftMaskDictionary** out);
+bool mapSoftMaskImageDictionary(const SkPdfObject& in, SkPdfSoftMaskImageDictionary** out);
+bool mapSoftMaskImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoftMaskImageDictionary** out);
+bool mapTransparencyGroupDictionary(const SkPdfObject& in, SkPdfTransparencyGroupDictionary** out);
+bool mapTransparencyGroupDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTransparencyGroupDictionary** out);
+bool mapViewerPreferencesDictionary(const SkPdfObject& in, SkPdfViewerPreferencesDictionary** out);
+bool mapViewerPreferencesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfViewerPreferencesDictionary** out);
+bool mapOutlineDictionary(const SkPdfObject& in, SkPdfOutlineDictionary** out);
+bool mapOutlineDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfOutlineDictionary** out);
+bool mapOutlineItemDictionary(const SkPdfObject& in, SkPdfOutlineItemDictionary** out);
+bool mapOutlineItemDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfOutlineItemDictionary** out);
+bool mapPageLabelDictionary(const SkPdfObject& in, SkPdfPageLabelDictionary** out);
+bool mapPageLabelDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPageLabelDictionary** out);
+bool mapThreadDictionary(const SkPdfObject& in, SkPdfThreadDictionary** out);
+bool mapThreadDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfThreadDictionary** out);
+bool mapBeadDictionary(const SkPdfObject& in, SkPdfBeadDictionary** out);
+bool mapBeadDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBeadDictionary** out);
+bool mapTransitionDictionary(const SkPdfObject& in, SkPdfTransitionDictionary** out);
+bool mapTransitionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTransitionDictionary** out);
+bool mapAnnotationDictionary(const SkPdfObject& in, SkPdfAnnotationDictionary** out);
+bool mapAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAnnotationDictionary** out);
+bool mapBorderStyleDictionary(const SkPdfObject& in, SkPdfBorderStyleDictionary** out);
+bool mapBorderStyleDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBorderStyleDictionary** out);
+bool mapAppearanceDictionary(const SkPdfObject& in, SkPdfAppearanceDictionary** out);
+bool mapAppearanceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAppearanceDictionary** out);
+bool mapTextAnnotationDictionary(const SkPdfObject& in, SkPdfTextAnnotationDictionary** out);
+bool mapTextAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTextAnnotationDictionary** out);
+bool mapALinkAnnotationDictionary(const SkPdfObject& in, SkPdfALinkAnnotationDictionary** out);
+bool mapALinkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfALinkAnnotationDictionary** out);
+bool mapFreeTextAnnotationDictionary(const SkPdfObject& in, SkPdfFreeTextAnnotationDictionary** out);
+bool mapFreeTextAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFreeTextAnnotationDictionary** out);
+bool mapLineAnnotationDictionary(const SkPdfObject& in, SkPdfLineAnnotationDictionary** out);
+bool mapLineAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfLineAnnotationDictionary** out);
+bool mapSquareOrCircleAnnotation(const SkPdfObject& in, SkPdfSquareOrCircleAnnotation** out);
+bool mapSquareOrCircleAnnotation(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSquareOrCircleAnnotation** out);
+bool mapMarkupAnnotationsDictionary(const SkPdfObject& in, SkPdfMarkupAnnotationsDictionary** out);
+bool mapMarkupAnnotationsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMarkupAnnotationsDictionary** out);
+bool mapRubberStampAnnotationDictionary(const SkPdfObject& in, SkPdfRubberStampAnnotationDictionary** out);
+bool mapRubberStampAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfRubberStampAnnotationDictionary** out);
+bool mapInkAnnotationDictionary(const SkPdfObject& in, SkPdfInkAnnotationDictionary** out);
+bool mapInkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfInkAnnotationDictionary** out);
+bool mapPopUpAnnotationDictionary(const SkPdfObject& in, SkPdfPopUpAnnotationDictionary** out);
+bool mapPopUpAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPopUpAnnotationDictionary** out);
+bool mapFileAttachmentAnnotationDictionary(const SkPdfObject& in, SkPdfFileAttachmentAnnotationDictionary** out);
+bool mapFileAttachmentAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFileAttachmentAnnotationDictionary** out);
+bool mapSoundAnnotationDictionary(const SkPdfObject& in, SkPdfSoundAnnotationDictionary** out);
+bool mapSoundAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoundAnnotationDictionary** out);
+bool mapMovieAnnotationDictionary(const SkPdfObject& in, SkPdfMovieAnnotationDictionary** out);
+bool mapMovieAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMovieAnnotationDictionary** out);
+bool mapWidgetAnnotationDictionary(const SkPdfObject& in, SkPdfWidgetAnnotationDictionary** out);
+bool mapWidgetAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWidgetAnnotationDictionary** out);
+bool mapActionDictionary(const SkPdfObject& in, SkPdfActionDictionary** out);
+bool mapActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfActionDictionary** out);
+bool mapAnnotationActionsDictionary(const SkPdfObject& in, SkPdfAnnotationActionsDictionary** out);
+bool mapAnnotationActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAnnotationActionsDictionary** out);
+bool mapPageObjectActionsDictionary(const SkPdfObject& in, SkPdfPageObjectActionsDictionary** out);
+bool mapPageObjectActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPageObjectActionsDictionary** out);
+bool mapFormFieldActionsDictionary(const SkPdfObject& in, SkPdfFormFieldActionsDictionary** out);
+bool mapFormFieldActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFormFieldActionsDictionary** out);
+bool mapDocumentCatalogActionsDictionary(const SkPdfObject& in, SkPdfDocumentCatalogActionsDictionary** out);
+bool mapDocumentCatalogActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDocumentCatalogActionsDictionary** out);
+bool mapGoToActionDictionary(const SkPdfObject& in, SkPdfGoToActionDictionary** out);
+bool mapGoToActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfGoToActionDictionary** out);
+bool mapRemoteGoToActionDictionary(const SkPdfObject& in, SkPdfRemoteGoToActionDictionary** out);
+bool mapRemoteGoToActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfRemoteGoToActionDictionary** out);
+bool mapLaunchActionDictionary(const SkPdfObject& in, SkPdfLaunchActionDictionary** out);
+bool mapLaunchActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfLaunchActionDictionary** out);
+bool mapWindowsLaunchActionDictionary(const SkPdfObject& in, SkPdfWindowsLaunchActionDictionary** out);
+bool mapWindowsLaunchActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWindowsLaunchActionDictionary** out);
+bool mapThreadActionDictionary(const SkPdfObject& in, SkPdfThreadActionDictionary** out);
+bool mapThreadActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfThreadActionDictionary** out);
+bool mapURIActionDictionary(const SkPdfObject& in, SkPdfURIActionDictionary** out);
+bool mapURIActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfURIActionDictionary** out);
+bool mapURIDictionary(const SkPdfObject& in, SkPdfURIDictionary** out);
+bool mapURIDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfURIDictionary** out);
+bool mapSoundActionDictionary(const SkPdfObject& in, SkPdfSoundActionDictionary** out);
+bool mapSoundActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoundActionDictionary** out);
+bool mapMovieActionDictionary(const SkPdfObject& in, SkPdfMovieActionDictionary** out);
+bool mapMovieActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMovieActionDictionary** out);
+bool mapHideActionDictionary(const SkPdfObject& in, SkPdfHideActionDictionary** out);
+bool mapHideActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfHideActionDictionary** out);
+bool mapNamedActionsDictionary(const SkPdfObject& in, SkPdfNamedActionsDictionary** out);
+bool mapNamedActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfNamedActionsDictionary** out);
+bool mapInteractiveFormDictionary(const SkPdfObject& in, SkPdfInteractiveFormDictionary** out);
+bool mapInteractiveFormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfInteractiveFormDictionary** out);
+bool mapFieldDictionary(const SkPdfObject& in, SkPdfFieldDictionary** out);
+bool mapFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFieldDictionary** out);
+bool mapVariableTextFieldDictionary(const SkPdfObject& in, SkPdfVariableTextFieldDictionary** out);
+bool mapVariableTextFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfVariableTextFieldDictionary** out);
+bool mapAppearanceCharacteristicsDictionary(const SkPdfObject& in, SkPdfAppearanceCharacteristicsDictionary** out);
+bool mapAppearanceCharacteristicsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAppearanceCharacteristicsDictionary** out);
+bool mapCheckboxFieldDictionary(const SkPdfObject& in, SkPdfCheckboxFieldDictionary** out);
+bool mapCheckboxFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfCheckboxFieldDictionary** out);
+bool mapRadioButtonFieldDictionary(const SkPdfObject& in, SkPdfRadioButtonFieldDictionary** out);
+bool mapRadioButtonFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfRadioButtonFieldDictionary** out);
+bool mapTextFieldDictionary(const SkPdfObject& in, SkPdfTextFieldDictionary** out);
+bool mapTextFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTextFieldDictionary** out);
+bool mapChoiceFieldDictionary(const SkPdfObject& in, SkPdfChoiceFieldDictionary** out);
+bool mapChoiceFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfChoiceFieldDictionary** out);
+bool mapSignatureDictionary(const SkPdfObject& in, SkPdfSignatureDictionary** out);
+bool mapSignatureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSignatureDictionary** out);
+bool mapSubmitFormActionDictionary(const SkPdfObject& in, SkPdfSubmitFormActionDictionary** out);
+bool mapSubmitFormActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSubmitFormActionDictionary** out);
+bool mapResetFormActionDictionary(const SkPdfObject& in, SkPdfResetFormActionDictionary** out);
+bool mapResetFormActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfResetFormActionDictionary** out);
+bool mapImportDataActionDictionary(const SkPdfObject& in, SkPdfImportDataActionDictionary** out);
+bool mapImportDataActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfImportDataActionDictionary** out);
+bool mapJavascriptActionDictionary(const SkPdfObject& in, SkPdfJavascriptActionDictionary** out);
+bool mapJavascriptActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfJavascriptActionDictionary** out);
+bool mapFDFTrailerDictionary(const SkPdfObject& in, SkPdfFDFTrailerDictionary** out);
+bool mapFDFTrailerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFTrailerDictionary** out);
+bool mapFDFCatalogDictionary(const SkPdfObject& in, SkPdfFDFCatalogDictionary** out);
+bool mapFDFCatalogDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFCatalogDictionary** out);
+bool mapFDFDictionary(const SkPdfObject& in, SkPdfFDFDictionary** out);
+bool mapFDFDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFDictionary** out);
+bool mapEncryptedEmbeddedFileStreamDictionary(const SkPdfObject& in, SkPdfEncryptedEmbeddedFileStreamDictionary** out);
+bool mapEncryptedEmbeddedFileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfEncryptedEmbeddedFileStreamDictionary** out);
+bool mapJavascriptDictionary(const SkPdfObject& in, SkPdfJavascriptDictionary** out);
+bool mapJavascriptDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfJavascriptDictionary** out);
+bool mapFDFFieldDictionary(const SkPdfObject& in, SkPdfFDFFieldDictionary** out);
+bool mapFDFFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFFieldDictionary** out);
+bool mapIconFitDictionary(const SkPdfObject& in, SkPdfIconFitDictionary** out);
+bool mapIconFitDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfIconFitDictionary** out);
+bool mapFDFPageDictionary(const SkPdfObject& in, SkPdfFDFPageDictionary** out);
+bool mapFDFPageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFPageDictionary** out);
+bool mapFDFTemplateDictionary(const SkPdfObject& in, SkPdfFDFTemplateDictionary** out);
+bool mapFDFTemplateDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFTemplateDictionary** out);
+bool mapFDFNamedPageReferenceDictionary(const SkPdfObject& in, SkPdfFDFNamedPageReferenceDictionary** out);
+bool mapFDFNamedPageReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFNamedPageReferenceDictionary** out);
+bool mapFDFFileAnnotationDictionary(const SkPdfObject& in, SkPdfFDFFileAnnotationDictionary** out);
+bool mapFDFFileAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfFDFFileAnnotationDictionary** out);
+bool mapSoundObjectDictionary(const SkPdfObject& in, SkPdfSoundObjectDictionary** out);
+bool mapSoundObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSoundObjectDictionary** out);
+bool mapMovieDictionary(const SkPdfObject& in, SkPdfMovieDictionary** out);
+bool mapMovieDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMovieDictionary** out);
+bool mapMovieActivationDictionary(const SkPdfObject& in, SkPdfMovieActivationDictionary** out);
+bool mapMovieActivationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMovieActivationDictionary** out);
+bool mapDocumentInformationDictionary(const SkPdfObject& in, SkPdfDocumentInformationDictionary** out);
+bool mapDocumentInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfDocumentInformationDictionary** out);
+bool mapMetadataStreamDictionary(const SkPdfObject& in, SkPdfMetadataStreamDictionary** out);
+bool mapMetadataStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMetadataStreamDictionary** out);
+bool mapComponentsWithMetadataDictionary(const SkPdfObject& in, SkPdfComponentsWithMetadataDictionary** out);
+bool mapComponentsWithMetadataDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfComponentsWithMetadataDictionary** out);
+bool mapPagePieceDictionary(const SkPdfObject& in, SkPdfPagePieceDictionary** out);
+bool mapPagePieceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPagePieceDictionary** out);
+bool mapApplicationDataDictionary(const SkPdfObject& in, SkPdfApplicationDataDictionary** out);
+bool mapApplicationDataDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfApplicationDataDictionary** out);
+bool mapStructureTreeRootDictionary(const SkPdfObject& in, SkPdfStructureTreeRootDictionary** out);
+bool mapStructureTreeRootDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStructureTreeRootDictionary** out);
+bool mapStructureElementDictionary(const SkPdfObject& in, SkPdfStructureElementDictionary** out);
+bool mapStructureElementDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStructureElementDictionary** out);
+bool mapMarkedContentReferenceDictionary(const SkPdfObject& in, SkPdfMarkedContentReferenceDictionary** out);
+bool mapMarkedContentReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMarkedContentReferenceDictionary** out);
+bool mapObjectReferenceDictionary(const SkPdfObject& in, SkPdfObjectReferenceDictionary** out);
+bool mapObjectReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfObjectReferenceDictionary** out);
+bool mapStructureElementAccessDictionary(const SkPdfObject& in, SkPdfStructureElementAccessDictionary** out);
+bool mapStructureElementAccessDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStructureElementAccessDictionary** out);
+bool mapAttributeObjectDictionary(const SkPdfObject& in, SkPdfAttributeObjectDictionary** out);
+bool mapAttributeObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfAttributeObjectDictionary** out);
+bool mapMarkInformationDictionary(const SkPdfObject& in, SkPdfMarkInformationDictionary** out);
+bool mapMarkInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMarkInformationDictionary** out);
+bool mapArtifactsDictionary(const SkPdfObject& in, SkPdfArtifactsDictionary** out);
+bool mapArtifactsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfArtifactsDictionary** out);
+bool mapStandardStructureDictionary(const SkPdfObject& in, SkPdfStandardStructureDictionary** out);
+bool mapStandardStructureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfStandardStructureDictionary** out);
+bool mapBlockLevelStructureElementsDictionary(const SkPdfObject& in, SkPdfBlockLevelStructureElementsDictionary** out);
+bool mapBlockLevelStructureElementsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBlockLevelStructureElementsDictionary** out);
+bool mapInlineLevelStructureElementsDictionary(const SkPdfObject& in, SkPdfInlineLevelStructureElementsDictionary** out);
+bool mapInlineLevelStructureElementsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfInlineLevelStructureElementsDictionary** out);
+bool mapListAttributeDictionary(const SkPdfObject& in, SkPdfListAttributeDictionary** out);
+bool mapListAttributeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfListAttributeDictionary** out);
+bool mapTableAttributesDictionary(const SkPdfObject& in, SkPdfTableAttributesDictionary** out);
+bool mapTableAttributesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTableAttributesDictionary** out);
+bool mapWebCaptureInformationDictionary(const SkPdfObject& in, SkPdfWebCaptureInformationDictionary** out);
+bool mapWebCaptureInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureInformationDictionary** out);
+bool mapWebCaptureDictionary(const SkPdfObject& in, SkPdfWebCaptureDictionary** out);
+bool mapWebCaptureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureDictionary** out);
+bool mapWebCapturePageSetDictionary(const SkPdfObject& in, SkPdfWebCapturePageSetDictionary** out);
+bool mapWebCapturePageSetDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCapturePageSetDictionary** out);
+bool mapWebCaptureImageSetDictionary(const SkPdfObject& in, SkPdfWebCaptureImageSetDictionary** out);
+bool mapWebCaptureImageSetDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureImageSetDictionary** out);
+bool mapSourceInformationDictionary(const SkPdfObject& in, SkPdfSourceInformationDictionary** out);
+bool mapSourceInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSourceInformationDictionary** out);
+bool mapURLAliasDictionary(const SkPdfObject& in, SkPdfURLAliasDictionary** out);
+bool mapURLAliasDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfURLAliasDictionary** out);
+bool mapWebCaptureCommandDictionary(const SkPdfObject& in, SkPdfWebCaptureCommandDictionary** out);
+bool mapWebCaptureCommandDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureCommandDictionary** out);
+bool mapWebCaptureCommandSettingsDictionary(const SkPdfObject& in, SkPdfWebCaptureCommandSettingsDictionary** out);
+bool mapWebCaptureCommandSettingsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfWebCaptureCommandSettingsDictionary** out);
+bool mapBoxColorInformationDictionary(const SkPdfObject& in, SkPdfBoxColorInformationDictionary** out);
+bool mapBoxColorInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBoxColorInformationDictionary** out);
+bool mapBoxStyleDictionary(const SkPdfObject& in, SkPdfBoxStyleDictionary** out);
+bool mapBoxStyleDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfBoxStyleDictionary** out);
+bool mapPrinterMarkAnnotationDictionary(const SkPdfObject& in, SkPdfPrinterMarkAnnotationDictionary** out);
+bool mapPrinterMarkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPrinterMarkAnnotationDictionary** out);
+bool mapPrinterMarkFormDictionary(const SkPdfObject& in, SkPdfPrinterMarkFormDictionary** out);
+bool mapPrinterMarkFormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPrinterMarkFormDictionary** out);
+bool mapSeparationDictionary(const SkPdfObject& in, SkPdfSeparationDictionary** out);
+bool mapSeparationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfSeparationDictionary** out);
+bool mapPDF_XOutputIntentDictionary(const SkPdfObject& in, SkPdfPDF_XOutputIntentDictionary** out);
+bool mapPDF_XOutputIntentDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfPDF_XOutputIntentDictionary** out);
+bool mapTrapNetworkAnnotationDictionary(const SkPdfObject& in, SkPdfTrapNetworkAnnotationDictionary** out);
+bool mapTrapNetworkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTrapNetworkAnnotationDictionary** out);
+bool mapTrapNetworkAppearanceStreamDictionary(const SkPdfObject& in, SkPdfTrapNetworkAppearanceStreamDictionary** out);
+bool mapTrapNetworkAppearanceStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfTrapNetworkAppearanceStreamDictionary** out);
+bool mapOpiVersionDictionary(const SkPdfObject& in, SkPdfOpiVersionDictionary** out);
+bool mapOpiVersionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfOpiVersionDictionary** out);
+bool mapMultiMasterFontDictionary(const SkPdfObject& in, SkPdfMultiMasterFontDictionary** out);
+bool mapMultiMasterFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfMultiMasterFontDictionary** out);
+bool isObject(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ObjectFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfObject** data);
+bool ObjectFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfObject** data);
+bool isNull(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool NullFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfNull** data);
+bool NullFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfNull** data);
+bool isBoolean(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool BooleanFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfBoolean** data);
+bool BooleanFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfBoolean** data);
+bool isInteger(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool IntegerFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfInteger** data);
+bool IntegerFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfInteger** data);
+bool isNumber(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool NumberFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfNumber** data);
+bool NumberFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfNumber** data);
+bool isName(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool NameFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfName** data);
+bool NameFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfName** data);
+bool isReference(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ReferenceFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfReference** data);
+bool ReferenceFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfReference** data);
+bool isArray(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ArrayFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfArray** data);
+bool ArrayFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfArray** data);
+bool isString(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool StringFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfString** data);
+bool StringFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfString** data);
+bool isHexString(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool HexStringFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfHexString** data);
+bool HexStringFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfHexString** data);
+bool isDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool DictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfDictionary** data);
+bool DictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfDictionary** data);
+bool isStream(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool StreamFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStream** data);
+bool StreamFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStream** data);
+bool isXObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool XObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfXObjectDictionary** data);
+bool XObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfXObjectDictionary** data);
+bool isFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFontDictionary** data);
+bool FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFontDictionary** data);
+bool isTrueTypeFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool TrueTypeFontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTrueTypeFontDictionary** data);
+bool TrueTypeFontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTrueTypeFontDictionary** data);
+bool isStreamCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool StreamCommonDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStreamCommonDictionary** data);
+bool StreamCommonDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStreamCommonDictionary** data);
+bool isLzwdecodeAndFlatedecodeFiltersDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool LzwdecodeAndFlatedecodeFiltersDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfLzwdecodeAndFlatedecodeFiltersDictionary** data);
+bool LzwdecodeAndFlatedecodeFiltersDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfLzwdecodeAndFlatedecodeFiltersDictionary** data);
+bool isCcittfaxdecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool CcittfaxdecodeFilterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCcittfaxdecodeFilterDictionary** data);
+bool CcittfaxdecodeFilterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCcittfaxdecodeFilterDictionary** data);
+bool isJbig2DecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Jbig2DecodeFilterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfJbig2DecodeFilterDictionary** data);
+bool Jbig2DecodeFilterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfJbig2DecodeFilterDictionary** data);
+bool isDctdecodeFilterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool DctdecodeFilterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfDctdecodeFilterDictionary** data);
+bool DctdecodeFilterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfDctdecodeFilterDictionary** data);
+bool isFileTrailerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FileTrailerDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFileTrailerDictionary** data);
+bool FileTrailerDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFileTrailerDictionary** data);
+bool isEncryptionCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool EncryptionCommonDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfEncryptionCommonDictionary** data);
+bool EncryptionCommonDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfEncryptionCommonDictionary** data);
+bool isStandardSecurityHandlerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool StandardSecurityHandlerDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStandardSecurityHandlerDictionary** data);
+bool StandardSecurityHandlerDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStandardSecurityHandlerDictionary** data);
+bool isCatalogDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool CatalogDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCatalogDictionary** data);
+bool CatalogDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCatalogDictionary** data);
+bool isPageTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool PageTreeNodeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPageTreeNodeDictionary** data);
+bool PageTreeNodeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPageTreeNodeDictionary** data);
+bool isPageObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool PageObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPageObjectDictionary** data);
+bool PageObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPageObjectDictionary** data);
+bool isNameDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool NameDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfNameDictionary** data);
+bool NameDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfNameDictionary** data);
+bool isResourceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ResourceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfResourceDictionary** data);
+bool ResourceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfResourceDictionary** data);
+bool isNameTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool NameTreeNodeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfNameTreeNodeDictionary** data);
+bool NameTreeNodeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfNameTreeNodeDictionary** data);
+bool isNumberTreeNodeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool NumberTreeNodeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfNumberTreeNodeDictionary** data);
+bool NumberTreeNodeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfNumberTreeNodeDictionary** data);
+bool isFunctionCommonDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FunctionCommonDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFunctionCommonDictionary** data);
+bool FunctionCommonDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFunctionCommonDictionary** data);
+bool isType0FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type0FunctionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType0FunctionDictionary** data);
+bool Type0FunctionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType0FunctionDictionary** data);
+bool isType2FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type2FunctionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType2FunctionDictionary** data);
+bool Type2FunctionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType2FunctionDictionary** data);
+bool isType3FunctionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type3FunctionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType3FunctionDictionary** data);
+bool Type3FunctionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType3FunctionDictionary** data);
+bool isFileSpecificationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FileSpecificationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFileSpecificationDictionary** data);
+bool FileSpecificationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFileSpecificationDictionary** data);
+bool isEmbeddedFileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool EmbeddedFileStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfEmbeddedFileStreamDictionary** data);
+bool EmbeddedFileStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfEmbeddedFileStreamDictionary** data);
+bool isEmbeddedFileParameterDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool EmbeddedFileParameterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfEmbeddedFileParameterDictionary** data);
+bool EmbeddedFileParameterDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfEmbeddedFileParameterDictionary** data);
+bool isMacOsFileInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool MacOsFileInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMacOsFileInformationDictionary** data);
+bool MacOsFileInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMacOsFileInformationDictionary** data);
+bool isGraphicsStateDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool GraphicsStateDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfGraphicsStateDictionary** data);
+bool GraphicsStateDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfGraphicsStateDictionary** data);
+bool isCalgrayColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool CalgrayColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCalgrayColorSpaceDictionary** data);
+bool CalgrayColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCalgrayColorSpaceDictionary** data);
+bool isCalrgbColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool CalrgbColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCalrgbColorSpaceDictionary** data);
+bool CalrgbColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCalrgbColorSpaceDictionary** data);
+bool isLabColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool LabColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfLabColorSpaceDictionary** data);
+bool LabColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfLabColorSpaceDictionary** data);
+bool isIccProfileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool IccProfileStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfIccProfileStreamDictionary** data);
+bool IccProfileStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfIccProfileStreamDictionary** data);
+bool isDeviceNColorSpaceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool DeviceNColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfDeviceNColorSpaceDictionary** data);
+bool DeviceNColorSpaceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfDeviceNColorSpaceDictionary** data);
+bool isType1PatternDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type1PatternDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType1PatternDictionary** data);
+bool Type1PatternDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType1PatternDictionary** data);
+bool isType2PatternDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type2PatternDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType2PatternDictionary** data);
+bool Type2PatternDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType2PatternDictionary** data);
+bool isShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfShadingDictionary** data);
+bool ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfShadingDictionary** data);
+bool isType1ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type1ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType1ShadingDictionary** data);
+bool Type1ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType1ShadingDictionary** data);
+bool isType2ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type2ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType2ShadingDictionary** data);
+bool Type2ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType2ShadingDictionary** data);
+bool isType3ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type3ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType3ShadingDictionary** data);
+bool Type3ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType3ShadingDictionary** data);
+bool isType4ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type4ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType4ShadingDictionary** data);
+bool Type4ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType4ShadingDictionary** data);
+bool isType5ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type5ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType5ShadingDictionary** data);
+bool Type5ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType5ShadingDictionary** data);
+bool isType6ShadingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type6ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType6ShadingDictionary** data);
+bool Type6ShadingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType6ShadingDictionary** data);
+bool isImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ImageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfImageDictionary** data);
+bool ImageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfImageDictionary** data);
+bool isAlternateImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool AlternateImageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfAlternateImageDictionary** data);
+bool AlternateImageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfAlternateImageDictionary** data);
+bool isType1FormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type1FormDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType1FormDictionary** data);
+bool Type1FormDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType1FormDictionary** data);
+bool isGroupAttributesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool GroupAttributesDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfGroupAttributesDictionary** data);
+bool GroupAttributesDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfGroupAttributesDictionary** data);
+bool isReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfReferenceDictionary** data);
+bool ReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfReferenceDictionary** data);
+bool isPSXobjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool PSXobjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPSXobjectDictionary** data);
+bool PSXobjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPSXobjectDictionary** data);
+bool isType1FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type1FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType1FontDictionary** data);
+bool Type1FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType1FontDictionary** data);
+bool isType3FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type3FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType3FontDictionary** data);
+bool Type3FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType3FontDictionary** data);
+bool isEncodingDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool EncodingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfEncodingDictionary** data);
+bool EncodingDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfEncodingDictionary** data);
+bool isCIDSystemInfoDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool CIDSystemInfoDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCIDSystemInfoDictionary** data);
+bool CIDSystemInfoDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCIDSystemInfoDictionary** data);
+bool isCIDFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool CIDFontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCIDFontDictionary** data);
+bool CIDFontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCIDFontDictionary** data);
+bool isCMapDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool CMapDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCMapDictionary** data);
+bool CMapDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCMapDictionary** data);
+bool isType0FontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type0FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType0FontDictionary** data);
+bool Type0FontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType0FontDictionary** data);
+bool isFontDescriptorDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FontDescriptorDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFontDescriptorDictionary** data);
+bool FontDescriptorDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFontDescriptorDictionary** data);
+bool isCIDFontDescriptorDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool CIDFontDescriptorDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCIDFontDescriptorDictionary** data);
+bool CIDFontDescriptorDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCIDFontDescriptorDictionary** data);
+bool isEmbeddedFontStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool EmbeddedFontStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfEmbeddedFontStreamDictionary** data);
+bool EmbeddedFontStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfEmbeddedFontStreamDictionary** data);
+bool isType1HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type1HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType1HalftoneDictionary** data);
+bool Type1HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType1HalftoneDictionary** data);
+bool isType6HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type6HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType6HalftoneDictionary** data);
+bool Type6HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType6HalftoneDictionary** data);
+bool isType10HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type10HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType10HalftoneDictionary** data);
+bool Type10HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType10HalftoneDictionary** data);
+bool isType16HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type16HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType16HalftoneDictionary** data);
+bool Type16HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType16HalftoneDictionary** data);
+bool isType5HalftoneDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool Type5HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfType5HalftoneDictionary** data);
+bool Type5HalftoneDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfType5HalftoneDictionary** data);
+bool isSoftMaskDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool SoftMaskDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSoftMaskDictionary** data);
+bool SoftMaskDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSoftMaskDictionary** data);
+bool isSoftMaskImageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool SoftMaskImageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSoftMaskImageDictionary** data);
+bool SoftMaskImageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSoftMaskImageDictionary** data);
+bool isTransparencyGroupDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool TransparencyGroupDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTransparencyGroupDictionary** data);
+bool TransparencyGroupDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTransparencyGroupDictionary** data);
+bool isViewerPreferencesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ViewerPreferencesDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfViewerPreferencesDictionary** data);
+bool ViewerPreferencesDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfViewerPreferencesDictionary** data);
+bool isOutlineDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool OutlineDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfOutlineDictionary** data);
+bool OutlineDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfOutlineDictionary** data);
+bool isOutlineItemDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool OutlineItemDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfOutlineItemDictionary** data);
+bool OutlineItemDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfOutlineItemDictionary** data);
+bool isPageLabelDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool PageLabelDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPageLabelDictionary** data);
+bool PageLabelDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPageLabelDictionary** data);
+bool isThreadDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ThreadDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfThreadDictionary** data);
+bool ThreadDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfThreadDictionary** data);
+bool isBeadDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool BeadDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfBeadDictionary** data);
+bool BeadDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfBeadDictionary** data);
+bool isTransitionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool TransitionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTransitionDictionary** data);
+bool TransitionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTransitionDictionary** data);
+bool isAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool AnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfAnnotationDictionary** data);
+bool AnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfAnnotationDictionary** data);
+bool isBorderStyleDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool BorderStyleDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfBorderStyleDictionary** data);
+bool BorderStyleDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfBorderStyleDictionary** data);
+bool isAppearanceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool AppearanceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfAppearanceDictionary** data);
+bool AppearanceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfAppearanceDictionary** data);
+bool isTextAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool TextAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTextAnnotationDictionary** data);
+bool TextAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTextAnnotationDictionary** data);
+bool isALinkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ALinkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfALinkAnnotationDictionary** data);
+bool ALinkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfALinkAnnotationDictionary** data);
+bool isFreeTextAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FreeTextAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFreeTextAnnotationDictionary** data);
+bool FreeTextAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFreeTextAnnotationDictionary** data);
+bool isLineAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool LineAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfLineAnnotationDictionary** data);
+bool LineAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfLineAnnotationDictionary** data);
+bool isSquareOrCircleAnnotation(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool SquareOrCircleAnnotationFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSquareOrCircleAnnotation** data);
+bool SquareOrCircleAnnotationFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSquareOrCircleAnnotation** data);
+bool isMarkupAnnotationsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool MarkupAnnotationsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMarkupAnnotationsDictionary** data);
+bool MarkupAnnotationsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMarkupAnnotationsDictionary** data);
+bool isRubberStampAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool RubberStampAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfRubberStampAnnotationDictionary** data);
+bool RubberStampAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfRubberStampAnnotationDictionary** data);
+bool isInkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool InkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfInkAnnotationDictionary** data);
+bool InkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfInkAnnotationDictionary** data);
+bool isPopUpAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool PopUpAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPopUpAnnotationDictionary** data);
+bool PopUpAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPopUpAnnotationDictionary** data);
+bool isFileAttachmentAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FileAttachmentAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFileAttachmentAnnotationDictionary** data);
+bool FileAttachmentAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFileAttachmentAnnotationDictionary** data);
+bool isSoundAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool SoundAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSoundAnnotationDictionary** data);
+bool SoundAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSoundAnnotationDictionary** data);
+bool isMovieAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool MovieAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMovieAnnotationDictionary** data);
+bool MovieAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMovieAnnotationDictionary** data);
+bool isWidgetAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool WidgetAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWidgetAnnotationDictionary** data);
+bool WidgetAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWidgetAnnotationDictionary** data);
+bool isActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfActionDictionary** data);
+bool ActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfActionDictionary** data);
+bool isAnnotationActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool AnnotationActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfAnnotationActionsDictionary** data);
+bool AnnotationActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfAnnotationActionsDictionary** data);
+bool isPageObjectActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool PageObjectActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPageObjectActionsDictionary** data);
+bool PageObjectActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPageObjectActionsDictionary** data);
+bool isFormFieldActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FormFieldActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFormFieldActionsDictionary** data);
+bool FormFieldActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFormFieldActionsDictionary** data);
+bool isDocumentCatalogActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool DocumentCatalogActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfDocumentCatalogActionsDictionary** data);
+bool DocumentCatalogActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfDocumentCatalogActionsDictionary** data);
+bool isGoToActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool GoToActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfGoToActionDictionary** data);
+bool GoToActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfGoToActionDictionary** data);
+bool isRemoteGoToActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool RemoteGoToActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfRemoteGoToActionDictionary** data);
+bool RemoteGoToActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfRemoteGoToActionDictionary** data);
+bool isLaunchActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool LaunchActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfLaunchActionDictionary** data);
+bool LaunchActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfLaunchActionDictionary** data);
+bool isWindowsLaunchActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool WindowsLaunchActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWindowsLaunchActionDictionary** data);
+bool WindowsLaunchActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWindowsLaunchActionDictionary** data);
+bool isThreadActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ThreadActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfThreadActionDictionary** data);
+bool ThreadActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfThreadActionDictionary** data);
+bool isURIActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool URIActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfURIActionDictionary** data);
+bool URIActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfURIActionDictionary** data);
+bool isURIDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool URIDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfURIDictionary** data);
+bool URIDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfURIDictionary** data);
+bool isSoundActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool SoundActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSoundActionDictionary** data);
+bool SoundActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSoundActionDictionary** data);
+bool isMovieActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool MovieActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMovieActionDictionary** data);
+bool MovieActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMovieActionDictionary** data);
+bool isHideActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool HideActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfHideActionDictionary** data);
+bool HideActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfHideActionDictionary** data);
+bool isNamedActionsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool NamedActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfNamedActionsDictionary** data);
+bool NamedActionsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfNamedActionsDictionary** data);
+bool isInteractiveFormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool InteractiveFormDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfInteractiveFormDictionary** data);
+bool InteractiveFormDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfInteractiveFormDictionary** data);
+bool isFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFieldDictionary** data);
+bool FieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFieldDictionary** data);
+bool isVariableTextFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool VariableTextFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfVariableTextFieldDictionary** data);
+bool VariableTextFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfVariableTextFieldDictionary** data);
+bool isAppearanceCharacteristicsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool AppearanceCharacteristicsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfAppearanceCharacteristicsDictionary** data);
+bool AppearanceCharacteristicsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfAppearanceCharacteristicsDictionary** data);
+bool isCheckboxFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool CheckboxFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfCheckboxFieldDictionary** data);
+bool CheckboxFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfCheckboxFieldDictionary** data);
+bool isRadioButtonFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool RadioButtonFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfRadioButtonFieldDictionary** data);
+bool RadioButtonFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfRadioButtonFieldDictionary** data);
+bool isTextFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool TextFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTextFieldDictionary** data);
+bool TextFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTextFieldDictionary** data);
+bool isChoiceFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ChoiceFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfChoiceFieldDictionary** data);
+bool ChoiceFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfChoiceFieldDictionary** data);
+bool isSignatureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool SignatureDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSignatureDictionary** data);
+bool SignatureDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSignatureDictionary** data);
+bool isSubmitFormActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool SubmitFormActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSubmitFormActionDictionary** data);
+bool SubmitFormActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSubmitFormActionDictionary** data);
+bool isResetFormActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ResetFormActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfResetFormActionDictionary** data);
+bool ResetFormActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfResetFormActionDictionary** data);
+bool isImportDataActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ImportDataActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfImportDataActionDictionary** data);
+bool ImportDataActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfImportDataActionDictionary** data);
+bool isJavascriptActionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool JavascriptActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfJavascriptActionDictionary** data);
+bool JavascriptActionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfJavascriptActionDictionary** data);
+bool isFDFTrailerDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FDFTrailerDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFTrailerDictionary** data);
+bool FDFTrailerDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFTrailerDictionary** data);
+bool isFDFCatalogDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FDFCatalogDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFCatalogDictionary** data);
+bool FDFCatalogDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFCatalogDictionary** data);
+bool isFDFDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FDFDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFDictionary** data);
+bool FDFDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFDictionary** data);
+bool isEncryptedEmbeddedFileStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool EncryptedEmbeddedFileStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfEncryptedEmbeddedFileStreamDictionary** data);
+bool EncryptedEmbeddedFileStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfEncryptedEmbeddedFileStreamDictionary** data);
+bool isJavascriptDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool JavascriptDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfJavascriptDictionary** data);
+bool JavascriptDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfJavascriptDictionary** data);
+bool isFDFFieldDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FDFFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFFieldDictionary** data);
+bool FDFFieldDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFFieldDictionary** data);
+bool isIconFitDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool IconFitDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfIconFitDictionary** data);
+bool IconFitDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfIconFitDictionary** data);
+bool isFDFPageDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FDFPageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFPageDictionary** data);
+bool FDFPageDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFPageDictionary** data);
+bool isFDFTemplateDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FDFTemplateDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFTemplateDictionary** data);
+bool FDFTemplateDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFTemplateDictionary** data);
+bool isFDFNamedPageReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FDFNamedPageReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFNamedPageReferenceDictionary** data);
+bool FDFNamedPageReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFNamedPageReferenceDictionary** data);
+bool isFDFFileAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool FDFFileAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfFDFFileAnnotationDictionary** data);
+bool FDFFileAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfFDFFileAnnotationDictionary** data);
+bool isSoundObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool SoundObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSoundObjectDictionary** data);
+bool SoundObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSoundObjectDictionary** data);
+bool isMovieDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool MovieDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMovieDictionary** data);
+bool MovieDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMovieDictionary** data);
+bool isMovieActivationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool MovieActivationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMovieActivationDictionary** data);
+bool MovieActivationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMovieActivationDictionary** data);
+bool isDocumentInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool DocumentInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfDocumentInformationDictionary** data);
+bool DocumentInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfDocumentInformationDictionary** data);
+bool isMetadataStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool MetadataStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMetadataStreamDictionary** data);
+bool MetadataStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMetadataStreamDictionary** data);
+bool isComponentsWithMetadataDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ComponentsWithMetadataDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfComponentsWithMetadataDictionary** data);
+bool ComponentsWithMetadataDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfComponentsWithMetadataDictionary** data);
+bool isPagePieceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool PagePieceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPagePieceDictionary** data);
+bool PagePieceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPagePieceDictionary** data);
+bool isApplicationDataDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ApplicationDataDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfApplicationDataDictionary** data);
+bool ApplicationDataDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfApplicationDataDictionary** data);
+bool isStructureTreeRootDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool StructureTreeRootDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStructureTreeRootDictionary** data);
+bool StructureTreeRootDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStructureTreeRootDictionary** data);
+bool isStructureElementDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool StructureElementDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStructureElementDictionary** data);
+bool StructureElementDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStructureElementDictionary** data);
+bool isMarkedContentReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool MarkedContentReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMarkedContentReferenceDictionary** data);
+bool MarkedContentReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMarkedContentReferenceDictionary** data);
+bool isObjectReferenceDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ObjectReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfObjectReferenceDictionary** data);
+bool ObjectReferenceDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfObjectReferenceDictionary** data);
+bool isStructureElementAccessDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool StructureElementAccessDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStructureElementAccessDictionary** data);
+bool StructureElementAccessDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStructureElementAccessDictionary** data);
+bool isAttributeObjectDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool AttributeObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfAttributeObjectDictionary** data);
+bool AttributeObjectDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfAttributeObjectDictionary** data);
+bool isMarkInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool MarkInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMarkInformationDictionary** data);
+bool MarkInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMarkInformationDictionary** data);
+bool isArtifactsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ArtifactsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfArtifactsDictionary** data);
+bool ArtifactsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfArtifactsDictionary** data);
+bool isStandardStructureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool StandardStructureDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfStandardStructureDictionary** data);
+bool StandardStructureDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfStandardStructureDictionary** data);
+bool isBlockLevelStructureElementsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool BlockLevelStructureElementsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfBlockLevelStructureElementsDictionary** data);
+bool BlockLevelStructureElementsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfBlockLevelStructureElementsDictionary** data);
+bool isInlineLevelStructureElementsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool InlineLevelStructureElementsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfInlineLevelStructureElementsDictionary** data);
+bool InlineLevelStructureElementsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfInlineLevelStructureElementsDictionary** data);
+bool isListAttributeDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool ListAttributeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfListAttributeDictionary** data);
+bool ListAttributeDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfListAttributeDictionary** data);
+bool isTableAttributesDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool TableAttributesDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTableAttributesDictionary** data);
+bool TableAttributesDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTableAttributesDictionary** data);
+bool isWebCaptureInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool WebCaptureInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWebCaptureInformationDictionary** data);
+bool WebCaptureInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWebCaptureInformationDictionary** data);
+bool isWebCaptureDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool WebCaptureDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWebCaptureDictionary** data);
+bool WebCaptureDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWebCaptureDictionary** data);
+bool isWebCapturePageSetDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool WebCapturePageSetDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWebCapturePageSetDictionary** data);
+bool WebCapturePageSetDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWebCapturePageSetDictionary** data);
+bool isWebCaptureImageSetDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool WebCaptureImageSetDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWebCaptureImageSetDictionary** data);
+bool WebCaptureImageSetDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWebCaptureImageSetDictionary** data);
+bool isSourceInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool SourceInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSourceInformationDictionary** data);
+bool SourceInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSourceInformationDictionary** data);
+bool isURLAliasDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool URLAliasDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfURLAliasDictionary** data);
+bool URLAliasDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfURLAliasDictionary** data);
+bool isWebCaptureCommandDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool WebCaptureCommandDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWebCaptureCommandDictionary** data);
+bool WebCaptureCommandDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWebCaptureCommandDictionary** data);
+bool isWebCaptureCommandSettingsDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool WebCaptureCommandSettingsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfWebCaptureCommandSettingsDictionary** data);
+bool WebCaptureCommandSettingsDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfWebCaptureCommandSettingsDictionary** data);
+bool isBoxColorInformationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool BoxColorInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfBoxColorInformationDictionary** data);
+bool BoxColorInformationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfBoxColorInformationDictionary** data);
+bool isBoxStyleDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool BoxStyleDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfBoxStyleDictionary** data);
+bool BoxStyleDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfBoxStyleDictionary** data);
+bool isPrinterMarkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool PrinterMarkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPrinterMarkAnnotationDictionary** data);
+bool PrinterMarkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPrinterMarkAnnotationDictionary** data);
+bool isPrinterMarkFormDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool PrinterMarkFormDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPrinterMarkFormDictionary** data);
+bool PrinterMarkFormDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPrinterMarkFormDictionary** data);
+bool isSeparationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool SeparationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfSeparationDictionary** data);
+bool SeparationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfSeparationDictionary** data);
+bool isPDF_XOutputIntentDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool PDF_XOutputIntentDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfPDF_XOutputIntentDictionary** data);
+bool PDF_XOutputIntentDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfPDF_XOutputIntentDictionary** data);
+bool isTrapNetworkAnnotationDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool TrapNetworkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTrapNetworkAnnotationDictionary** data);
+bool TrapNetworkAnnotationDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTrapNetworkAnnotationDictionary** data);
+bool isTrapNetworkAppearanceStreamDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool TrapNetworkAppearanceStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfTrapNetworkAppearanceStreamDictionary** data);
+bool TrapNetworkAppearanceStreamDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfTrapNetworkAppearanceStreamDictionary** data);
+bool isOpiVersionDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool OpiVersionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfOpiVersionDictionary** data);
+bool OpiVersionDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfOpiVersionDictionary** data);
+bool isMultiMasterFontDictionary(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);
+bool MultiMasterFontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdfMultiMasterFontDictionary** data);
+bool MultiMasterFontDictionaryFromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdfMultiMasterFontDictionary** data);
 
 #endif  // __DEFINED__SkPdfPodofoMapper
diff --git a/experimental/PdfViewer/autogen/SkPdfPopUpAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfPopUpAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..35f68a0
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfPopUpAnnotationDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfPopUpAnnotationDictionary_autogen.h"
+
+std::string SkPdfPopUpAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfPopUpAnnotationDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfPopUpAnnotationDictionary::Parent() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+bool SkPdfPopUpAnnotationDictionary::Open() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Open", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfPopUpAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfPopUpAnnotationDictionary_autogen.h
index 6c1e25f..b3dc293 100644
--- a/experimental/PdfViewer/autogen/SkPdfPopUpAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfPopUpAnnotationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Optional; PDF 1.4) An alternate representation of the annotation's contents
  *  in human-readable form, useful when extracting the document's contents in
  *  support of accessibility to disabled users or for other purposes (see Section
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Optional; must be an indirect reference) The parent annotation with which
  *  this pop-up annotation is associated.
  *  Note: If this entry is present, the parent annotation's Contents, M, C, and T
@@ -565,13 +553,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", NULL));
   }
 
-  SkPdfDictionary* Parent() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Parent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Parent() const;
 /** (Optional) A flag specifying whether the pop-up annotation should initially
  *  be displayed open. Default value: false (closed).
 **/
@@ -579,13 +561,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Open", "", NULL));
   }
 
-  bool Open() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Open", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool Open() const;
 };
 
 #endif  // __DEFINED__SkPdfPopUpAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfPrinterMarkAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfPrinterMarkAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..8607e11
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfPrinterMarkAnnotationDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfPrinterMarkAnnotationDictionary_autogen.h"
+
+std::string SkPdfPrinterMarkAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfPrinterMarkAnnotationDictionary::MN() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MN", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfPrinterMarkAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfPrinterMarkAnnotationDictionary_autogen.h
index 07f7ff0..c6f8af3 100644
--- a/experimental/PdfViewer/autogen/SkPdfPrinterMarkAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfPrinterMarkAnnotationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Optional) An arbitrary name identifying the type of printer's mark, such as Color-
  *  Bar or RegistrationTarget.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MN", "", NULL));
   }
 
-  std::string MN() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MN", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string MN() const;
 };
 
 #endif  // __DEFINED__SkPdfPrinterMarkAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfPrinterMarkFormDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfPrinterMarkFormDictionary_autogen.cpp
new file mode 100644
index 0000000..3d7c3f6
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfPrinterMarkFormDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfPrinterMarkFormDictionary_autogen.h"
+
+std::string SkPdfPrinterMarkFormDictionary::MarkStyle() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MarkStyle", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfPrinterMarkFormDictionary::Colorants() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Colorants", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfPrinterMarkFormDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfPrinterMarkFormDictionary_autogen.h
index 1463783..3c2124b 100644
--- a/experimental/PdfViewer/autogen/SkPdfPrinterMarkFormDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfPrinterMarkFormDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MarkStyle", "", NULL));
   }
 
-  std::string MarkStyle() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MarkStyle", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string MarkStyle() const;
 /** (Optional; PDF 1.4) A dictionary identifying the individual colorants
  *  associated with a printer's mark such as a color bar. For each entry in this
  *  dictionary, the key is a colorant name and the value is an array defining a
@@ -550,13 +544,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Colorants", "", NULL));
   }
 
-  SkPdfDictionary* Colorants() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Colorants", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Colorants() const;
 };
 
 #endif  // __DEFINED__SkPdfPrinterMarkFormDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfRadioButtonFieldDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfRadioButtonFieldDictionary_autogen.cpp
new file mode 100644
index 0000000..ac178fc
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfRadioButtonFieldDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfRadioButtonFieldDictionary_autogen.h"
+
+SkPdfArray* SkPdfRadioButtonFieldDictionary::Opt() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Opt", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfRadioButtonFieldDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfRadioButtonFieldDictionary_autogen.h
index 35851bd..67fda2e 100644
--- a/experimental/PdfViewer/autogen/SkPdfRadioButtonFieldDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfRadioButtonFieldDictionary_autogen.h
@@ -535,13 +535,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Opt", "", NULL));
   }
 
-  SkPdfArray* Opt() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Opt", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Opt() const;
 };
 
 #endif  // __DEFINED__SkPdfRadioButtonFieldDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfReferenceDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfReferenceDictionary_autogen.cpp
new file mode 100644
index 0000000..e901c3e
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfReferenceDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfReferenceDictionary_autogen.h"
+
+SkPdfFileSpec SkPdfReferenceDictionary::F() const {
+  SkPdfFileSpec ret;
+  if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFileSpec();
+}
+
+long SkPdfReferenceDictionary::getPageAsInteger() const {
+  long ret = 0;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Page", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfReferenceDictionary::getPageAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Page", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfReferenceDictionary::ID() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfReferenceDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfReferenceDictionary_autogen.h
index dc4d679..3a0253c 100644
--- a/experimental/PdfViewer/autogen/SkPdfReferenceDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfReferenceDictionary_autogen.h
@@ -531,13 +531,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  SkPdfFileSpec F() const {
-    SkPdfFileSpec ret;
-    if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFileSpec();
-  }
-
+  SkPdfFileSpec F() const;
 /** (Required) A page index or page label (see Section 8.3.1, "Page Labels")
  *  identifying the page of the target document containing the content to be
  *  imported. Note that the reference is a weak one and can be inadvertently in-
@@ -554,26 +548,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Number;
   }
 
-  long getPageAsInteger() const {
-    long ret = 0;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Page", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long getPageAsInteger() const;
   bool isPageAString() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Page", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getPageAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Page", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getPageAsString() const;
 /** (Optional) An array of two strings constituting a file identifier (see Section 9.3,
  *  "File Identifiers") for the file containing the target document. The use of this
  *  entry improves a viewer application's chances of finding the intended file and
@@ -583,13 +565,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", NULL));
   }
 
-  SkPdfArray* ID() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* ID() const;
 };
 
 #endif  // __DEFINED__SkPdfReferenceDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfReference_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfReference_autogen.cpp
new file mode 100644
index 0000000..f78ef63
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfReference_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfReference_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/SkPdfRemoteGoToActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfRemoteGoToActionDictionary_autogen.cpp
new file mode 100644
index 0000000..b867053
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfRemoteGoToActionDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfRemoteGoToActionDictionary_autogen.h"
+
+std::string SkPdfRemoteGoToActionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfFileSpec SkPdfRemoteGoToActionDictionary::F() const {
+  SkPdfFileSpec ret;
+  if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFileSpec();
+}
+
+std::string SkPdfRemoteGoToActionDictionary::getDAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfRemoteGoToActionDictionary::getDAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfRemoteGoToActionDictionary::getDAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+bool SkPdfRemoteGoToActionDictionary::NewWindow() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "NewWindow", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfRemoteGoToActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfRemoteGoToActionDictionary_autogen.h
index eb42612..9ae32ca 100644
--- a/experimental/PdfViewer/autogen/SkPdfRemoteGoToActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfRemoteGoToActionDictionary_autogen.h
@@ -532,26 +532,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required) The file in which the destination is located.
 **/
   bool has_F() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  SkPdfFileSpec F() const {
-    SkPdfFileSpec ret;
-    if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFileSpec();
-  }
-
+  SkPdfFileSpec F() const;
 /** (Required) The destination to jump to (see Section 8.2.1, "Destinations"). If
  *  the value is an array defining an explicit destination (as described under
  *  "Explicit Destinations" on page 474), its first element must be a page number
@@ -568,39 +556,21 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getDAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getDAsName() const;
   bool isDAString() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getDAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getDAsString() const;
   bool isDAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getDAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getDAsArray() const;
 /** (Optional; PDF 1.2) A flag specifying whether to open the destination docu-
  *  ment in a new window. If this flag is false, the destination document will
  *  replace the current document in the same window. If this entry is absent,
@@ -611,13 +581,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "NewWindow", "", NULL));
   }
 
-  bool NewWindow() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "NewWindow", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool NewWindow() const;
 };
 
 #endif  // __DEFINED__SkPdfRemoteGoToActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfResetFormActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfResetFormActionDictionary_autogen.cpp
new file mode 100644
index 0000000..78a0eb4
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfResetFormActionDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfResetFormActionDictionary_autogen.h"
+
+std::string SkPdfResetFormActionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfResetFormActionDictionary::Fields() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfResetFormActionDictionary::Flags() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Flags", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfResetFormActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfResetFormActionDictionary_autogen.h
index b4efb99..206fa20 100644
--- a/experimental/PdfViewer/autogen/SkPdfResetFormActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfResetFormActionDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Optional) An array identifying which fields to reset or which to exclude
  *  from resetting, depending on the setting of the Include/Exclude flag in
  *  the Flags entry (see Table 8.64). Each element of the array is either an in-
@@ -552,13 +546,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", NULL));
   }
 
-  SkPdfArray* Fields() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Fields() const;
 /** (Optional; inheritable) A set of flags specifying various characteristics of
  *  the action (see Table 8.64). Default value: 0.
 **/
@@ -566,13 +554,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Flags", "", NULL));
   }
 
-  long Flags() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Flags", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Flags() const;
 };
 
 #endif  // __DEFINED__SkPdfResetFormActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfResourceDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfResourceDictionary_autogen.cpp
new file mode 100644
index 0000000..5f4e045
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfResourceDictionary_autogen.cpp
@@ -0,0 +1,58 @@
+#include "SkPdfResourceDictionary_autogen.h"
+
+SkPdfDictionary* SkPdfResourceDictionary::ExtGState() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ExtGState", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfResourceDictionary::ColorSpace() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfResourceDictionary::Pattern() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pattern", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfResourceDictionary::Shading() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Shading", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfResourceDictionary::XObject() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "XObject", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfResourceDictionary::Font() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Font", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfResourceDictionary::ProcSet() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ProcSet", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfResourceDictionary::Properties() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Properties", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfResourceDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfResourceDictionary_autogen.h
index bd7079d..a339701 100644
--- a/experimental/PdfViewer/autogen/SkPdfResourceDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfResourceDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ExtGState", "", NULL));
   }
 
-  SkPdfDictionary* ExtGState() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ExtGState", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* ExtGState() const;
 /** (Optional) A dictionary mapping each resource name to either the name of a
  *  device-dependent color space or an array describing a color space (see Sec-
  *  tion 4.5, "Color Spaces").
@@ -547,13 +541,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", NULL));
   }
 
-  SkPdfDictionary* ColorSpace() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* ColorSpace() const;
 /** (Optional) A dictionary mapping resource names to pattern objects (see Sec-
  *  tion 4.6, "Patterns").
 **/
@@ -561,13 +549,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pattern", "", NULL));
   }
 
-  SkPdfDictionary* Pattern() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pattern", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Pattern() const;
 /** (Optional; PDF 1.3) A dictionary mapping resource names to shading dic-
  *  tionaries (see "Shading Dictionaries" on page 233).
 **/
@@ -575,13 +557,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Shading", "", NULL));
   }
 
-  SkPdfDictionary* Shading() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Shading", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Shading() const;
 /** (Optional) A dictionary mapping resource names to external objects (see Sec-
  *  tion 4.7, "External Objects").
 **/
@@ -589,13 +565,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "XObject", "", NULL));
   }
 
-  SkPdfDictionary* XObject() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "XObject", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* XObject() const;
 /** (Optional) A dictionary mapping resource names to font dictionaries (see
  *  Chapter 5).
 **/
@@ -603,13 +573,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Font", "", NULL));
   }
 
-  SkPdfDictionary* Font() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Font", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Font() const;
 /** (Optional) An array of predefined procedure set names (see Section 9.1,
  *  "Procedure Sets").
 **/
@@ -617,13 +581,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ProcSet", "", NULL));
   }
 
-  SkPdfArray* ProcSet() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ProcSet", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* ProcSet() const;
 /** (Optional; PDF 1.2) A dictionary mapping resource names to property list
  *  dictionaries for marked content (see Section 9.5.1, "Property Lists").
 **/
@@ -631,13 +589,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Properties", "", NULL));
   }
 
-  SkPdfDictionary* Properties() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Properties", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Properties() const;
 };
 
 #endif  // __DEFINED__SkPdfResourceDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfRubberStampAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfRubberStampAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..6636d98
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfRubberStampAnnotationDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfRubberStampAnnotationDictionary_autogen.h"
+
+std::string SkPdfRubberStampAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfRubberStampAnnotationDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfRubberStampAnnotationDictionary::Name() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfRubberStampAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfRubberStampAnnotationDictionary_autogen.h
index 1d56702..b810ebc 100644
--- a/experimental/PdfViewer/autogen/SkPdfRubberStampAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfRubberStampAnnotationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required) The text to be displayed in the pop-up window when the annotation
  *  is opened. Carriage returns may be used to separate the text into paragraphs.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Optional) The name of an icon to be used in displaying the annotation. Viewer
  *  applications should provide predefined icon appearances for at least the follow-
  *  ing standard names:
@@ -569,13 +557,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", NULL));
   }
 
-  std::string Name() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Name() const;
 };
 
 #endif  // __DEFINED__SkPdfRubberStampAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfSeparationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfSeparationDictionary_autogen.cpp
new file mode 100644
index 0000000..533e5d5
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfSeparationDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfSeparationDictionary_autogen.h"
+
+SkPdfArray* SkPdfSeparationDictionary::Pages() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfSeparationDictionary::getDeviceColorantAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DeviceColorant", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfSeparationDictionary::getDeviceColorantAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DeviceColorant", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfSeparationDictionary::ColorSpace() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfSeparationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfSeparationDictionary_autogen.h
index 1c48aba..d4a2c3e 100644
--- a/experimental/PdfViewer/autogen/SkPdfSeparationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfSeparationDictionary_autogen.h
@@ -535,13 +535,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", NULL));
   }
 
-  SkPdfArray* Pages() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pages", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Pages() const;
 /** (Required) The name of the device colorant to be used in rendering this
  *  separation, such as Cyan or PANTONE 35 CV.
 **/
@@ -555,26 +549,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getDeviceColorantAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DeviceColorant", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getDeviceColorantAsName() const;
   bool isDeviceColorantAString() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DeviceColorant", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getDeviceColorantAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DeviceColorant", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getDeviceColorantAsString() const;
 /** (Optional) An array defining a Separation or DeviceN color space (see "Separa-
  *  tion Color Spaces" on page 201 and "DeviceN Color Spaces" on page 205). This
  *  provides additional information about the color specified by DeviceColorant-
@@ -590,13 +572,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", NULL));
   }
 
-  SkPdfArray* ColorSpace() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* ColorSpace() const;
 };
 
 #endif  // __DEFINED__SkPdfSeparationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfShadingDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfShadingDictionary_autogen.cpp
new file mode 100644
index 0000000..61b986a
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfShadingDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfShadingDictionary_autogen.h"
+
+long SkPdfShadingDictionary::ShadingType() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ShadingType", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfShadingDictionary::getColorSpaceAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfShadingDictionary::getColorSpaceAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfShadingDictionary::Background() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Background", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkRect* SkPdfShadingDictionary::BBox() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+bool SkPdfShadingDictionary::AntiAlias() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AntiAlias", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfShadingDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfShadingDictionary_autogen.h
index b859b46..2009666 100644
--- a/experimental/PdfViewer/autogen/SkPdfShadingDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfShadingDictionary_autogen.h
@@ -520,13 +520,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ShadingType", "", NULL));
   }
 
-  long ShadingType() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ShadingType", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long ShadingType() const;
 /** (Required) The color space in which color values are expressed. This may be
  *  any device, CIE-based, or special color space except a Pattern space. See
  *  "Color Space: Special Considerations," below, for further information.
@@ -541,26 +535,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getColorSpaceAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getColorSpaceAsName() const;
   bool isColorSpaceAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getColorSpaceAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColorSpace", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getColorSpaceAsArray() const;
 /** (Optional) An array of color components appropriate to the color space,
  *  specifying a single background color value. If present, this color is used be-
  *  fore any painting operation involving the shading, to fill those portions of the
@@ -575,13 +557,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Background", "", NULL));
   }
 
-  SkPdfArray* Background() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Background", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Background() const;
 /** (Optional) An array of four numbers giving the left, bottom, right, and top
  *  coordinates, respectively, of the shading's bounding box. The coordinates are
  *  interpreted in the shading's target coordinate space. If present, this bounding
@@ -593,13 +569,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BBox", "", NULL));
   }
 
-  SkRect* BBox() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* BBox() const;
 /** (Optional) A flag indicating whether to filter the shading function to prevent
  *  aliasing artifacts. The shading operators sample shading functions at a rate
  *  determined by the resolution of the output device. Aliasing can occur if the
@@ -614,13 +584,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AntiAlias", "", NULL));
   }
 
-  bool AntiAlias() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AntiAlias", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool AntiAlias() const;
 };
 
 #endif  // __DEFINED__SkPdfShadingDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfSignatureDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfSignatureDictionary_autogen.cpp
new file mode 100644
index 0000000..924cb9a
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfSignatureDictionary_autogen.cpp
@@ -0,0 +1,65 @@
+#include "SkPdfSignatureDictionary_autogen.h"
+
+std::string SkPdfSignatureDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfSignatureDictionary::Filter() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Filter", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfSignatureDictionary::SubFilter() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SubFilter", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfSignatureDictionary::ByteRange() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ByteRange", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfSignatureDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfSignatureDictionary::Name() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDate SkPdfSignatureDictionary::M() const {
+  SkPdfDate ret;
+  if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "M", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfDate();
+}
+
+std::string SkPdfSignatureDictionary::Location() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Location", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfSignatureDictionary::Reason() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Reason", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfSignatureDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfSignatureDictionary_autogen.h
index cdb249c..e365ef6 100644
--- a/experimental/PdfViewer/autogen/SkPdfSignatureDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfSignatureDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required; inheritable) The name of the signature handler to be used for
  *  authenticating the field's contents, such as Adobe.PPKLite, Entrust.PPKEF,
  *  CICI.SignIt, or VeriSign.PPKVS.
@@ -547,26 +541,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Filter", "", NULL));
   }
 
-  std::string Filter() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Filter", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Filter() const;
 /** (Optional) The name of a specific submethod of the specified handler.
 **/
   bool has_SubFilter() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SubFilter", "", NULL));
   }
 
-  std::string SubFilter() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SubFilter", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string SubFilter() const;
 /** (Required) An array of pairs of integers (starting byte offset, length in bytes)
  *  describing the exact byte range for the digest calculation. Multiple discontig-
  *  uous byte ranges may be used to describe a digest that does not include the
@@ -576,39 +558,21 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ByteRange", "", NULL));
   }
 
-  SkPdfArray* ByteRange() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ByteRange", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* ByteRange() const;
 /** (Required) The encrypted signature token.
 **/
   bool has_Contents() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Optional) The name of the person or authority signing the document.
 **/
   bool has_Name() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", NULL));
   }
 
-  std::string Name() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Name() const;
 /** (Optional) The time of signing. Depending on the signature handler, this
  *  may be a normal unverified computer time or a time generated in a verifiable
  *  way from a secure time server.
@@ -617,39 +581,21 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "M", "", NULL));
   }
 
-  SkPdfDate M() const {
-    SkPdfDate ret;
-    if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "M", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfDate();
-  }
-
+  SkPdfDate M() const;
 /** (Optional) The CPU host name or physical location of the signing.
 **/
   bool has_Location() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Location", "", NULL));
   }
 
-  std::string Location() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Location", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Location() const;
 /** (Optional) The reason for the signing, such as (I agree...).
 **/
   bool has_Reason() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Reason", "", NULL));
   }
 
-  std::string Reason() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Reason", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Reason() const;
 };
 
 #endif  // __DEFINED__SkPdfSignatureDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfSoftMaskDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfSoftMaskDictionary_autogen.cpp
new file mode 100644
index 0000000..b6a7e48
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfSoftMaskDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfSoftMaskDictionary_autogen.h"
+
+std::string SkPdfSoftMaskDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfSoftMaskDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfSoftMaskDictionary::G() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "G", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfSoftMaskDictionary::BC() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BC", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfFunction SkPdfSoftMaskDictionary::getTRAsFunction() const {
+  SkPdfFunction ret = SkPdfFunction();
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+std::string SkPdfSoftMaskDictionary::getTRAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfSoftMaskDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfSoftMaskDictionary_autogen.h
index 73295e0..735a359 100644
--- a/experimental/PdfViewer/autogen/SkPdfSoftMaskDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfSoftMaskDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) A subtype specifying the method to be used in deriving the mask
  *  values from the transparency group specified by the G entry:
  *     Alpha          Use the group's computed alpha, disregarding its color (see
@@ -551,13 +545,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required) A transparency group XObject (see Section 7.5.5, "Transparency
  *  Group XObjects") to be used as the source of alpha or color values for deriv-
  *  ing the mask. If the subtype S is Luminosity, the group attributes dictionary
@@ -568,13 +556,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "G", "", NULL));
   }
 
-  SkPdfStream* G() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "G", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* G() const;
 /** (Optional) An array of component values specifying the color to be used as
  *  the backdrop against which to composite the transparency group XObject G.
  *  This entry is consulted only if the subtype S is Luminosity. The array consists
@@ -587,13 +569,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BC", "", NULL));
   }
 
-  SkPdfArray* BC() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BC", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* BC() const;
 /** (Optional) A function object (see Section 3.9, "Functions") specifying the
  *  transfer function to be used in deriving the mask values. The function ac-
  *  cepts one input, the computed group alpha or luminosity (depending on the
@@ -613,26 +589,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfFunction getTRAsFunction() const {
-    SkPdfFunction ret = SkPdfFunction();
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction getTRAsFunction() const;
   bool isTRAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getTRAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TR", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getTRAsName() const;
 };
 
 #endif  // __DEFINED__SkPdfSoftMaskDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfSoftMaskImageDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfSoftMaskImageDictionary_autogen.cpp
new file mode 100644
index 0000000..c2fb208
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfSoftMaskImageDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfSoftMaskImageDictionary_autogen.h"
+
+SkPdfArray* SkPdfSoftMaskImageDictionary::Matte() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matte", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfSoftMaskImageDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfSoftMaskImageDictionary_autogen.h
index 4ca3995..259a46b 100644
--- a/experimental/PdfViewer/autogen/SkPdfSoftMaskImageDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfSoftMaskImageDictionary_autogen.h
@@ -536,13 +536,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matte", "", NULL));
   }
 
-  SkPdfArray* Matte() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matte", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Matte() const;
 };
 
 #endif  // __DEFINED__SkPdfSoftMaskImageDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfSoundActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfSoundActionDictionary_autogen.cpp
new file mode 100644
index 0000000..e98c8a0
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfSoundActionDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfSoundActionDictionary_autogen.h"
+
+std::string SkPdfSoundActionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfSoundActionDictionary::Sound() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Sound", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+double SkPdfSoundActionDictionary::Volume() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Volume", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+bool SkPdfSoundActionDictionary::Synchronous() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Synchronous", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+bool SkPdfSoundActionDictionary::Repeat() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Repeat", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+bool SkPdfSoundActionDictionary::Mix() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mix", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfSoundActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfSoundActionDictionary_autogen.h
index be04ec6..f300de4 100644
--- a/experimental/PdfViewer/autogen/SkPdfSoundActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfSoundActionDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required) A sound object defining the sound to be played (see Section 8.7,
  *  "Sounds"; see also implementation note 76 in Appendix H).
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Sound", "", NULL));
   }
 
-  SkPdfStream* Sound() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Sound", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Sound() const;
 /** (Optional) The volume at which to play the sound, in the range -1.0 to 1.0.
  *  Higher values denote greater volume; negative values mute the sound.
  *  Default value: 1.0.
@@ -561,13 +549,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Volume", "", NULL));
   }
 
-  double Volume() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Volume", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double Volume() const;
 /** (Optional) A flag specifying whether to play the sound synchronously or
  *  asynchronously. If this flag is true, the viewer application will retain control,
  *  allowing no further user interaction other than canceling the sound, until the
@@ -577,13 +559,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Synchronous", "", NULL));
   }
 
-  bool Synchronous() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Synchronous", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool Synchronous() const;
 /** (Optional) A flag specifying whether to repeat the sound indefinitely. If this
  *  entry is present, the Synchronous entry is ignored. Default value: false.
 **/
@@ -591,13 +567,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Repeat", "", NULL));
   }
 
-  bool Repeat() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Repeat", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool Repeat() const;
 /** (Optional) A flag specifying whether to mix this sound with any other sound
  *  already playing. If this flag is false, any previously playing sound will be
  *  stopped before starting this sound; this can be used to stop a repeating sound
@@ -607,13 +577,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mix", "", NULL));
   }
 
-  bool Mix() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Mix", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool Mix() const;
 };
 
 #endif  // __DEFINED__SkPdfSoundActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfSoundAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfSoundAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..f9ad2bc
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfSoundAnnotationDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfSoundAnnotationDictionary_autogen.h"
+
+std::string SkPdfSoundAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfSoundAnnotationDictionary::Sound() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Sound", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfSoundAnnotationDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfSoundAnnotationDictionary::Name() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfSoundAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfSoundAnnotationDictionary_autogen.h
index 523ff1d..6e37c87 100644
--- a/experimental/PdfViewer/autogen/SkPdfSoundAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfSoundAnnotationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required) A sound object defining the sound to be played when the annotation
  *  is activated (see Section 8.7, "Sounds").
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Sound", "", NULL));
   }
 
-  SkPdfStream* Sound() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Sound", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Sound() const;
 /** (Optional) Text to be displayed in a pop-up window for the annotation in place
  *  of the sound, useful when extracting the document's contents in support of
  *  accessibility to disabled users or for other purposes (see Section 9.8.2, "Alternate
@@ -562,13 +550,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Optional) The name of an icon to be used in displaying the annotation. Viewer
  *  applications should provide predefined icon appearances for at least the stan-
  *  dard names Speaker and Microphone; additional names may be supported as
@@ -580,13 +562,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", NULL));
   }
 
-  std::string Name() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Name() const;
 };
 
 #endif  // __DEFINED__SkPdfSoundAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfSoundObjectDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfSoundObjectDictionary_autogen.cpp
new file mode 100644
index 0000000..f05bf22
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfSoundObjectDictionary_autogen.cpp
@@ -0,0 +1,51 @@
+#include "SkPdfSoundObjectDictionary_autogen.h"
+
+std::string SkPdfSoundObjectDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+double SkPdfSoundObjectDictionary::R() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfSoundObjectDictionary::C() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfSoundObjectDictionary::B() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "B", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfSoundObjectDictionary::E() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "E", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfSoundObjectDictionary::CO() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CO", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfObject* SkPdfSoundObjectDictionary::CP() const {
+  SkPdfObject* ret;
+  if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CP", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfSoundObjectDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfSoundObjectDictionary_autogen.h
index 09ff7d0..34a40b3 100644
--- a/experimental/PdfViewer/autogen/SkPdfSoundObjectDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfSoundObjectDictionary_autogen.h
@@ -532,26 +532,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The sampling rate, in samples per second.
 **/
   bool has_R() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", NULL));
   }
 
-  double R() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double R() const;
 /** (Optional) The number of sound channels. Default value: 1. (See implementation
  *  note 101 in Appendix H.)
 **/
@@ -559,26 +547,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", NULL));
   }
 
-  long C() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long C() const;
 /** (Optional) The number of bits per sample value per channel. Default value: 8.
 **/
   bool has_B() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "B", "", NULL));
   }
 
-  long B() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "B", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long B() const;
 /** (Optional) The encoding format for the sample data:
  *     Raw          Unspecified or unsigned values in the range 0 to 2B - 1
  *     Signed       Twos-complement values
@@ -590,13 +566,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "E", "", NULL));
   }
 
-  std::string E() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "E", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string E() const;
 /** (Optional) The sound compression format used on the sample data. (Note that this is
  *  separate from any stream compression specified by the sound object's Filter entry; see
  *  Table 3.4 on page 38 and Section 3.3, "Filters.") If this entry is absent, then no sound
@@ -607,13 +577,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CO", "", NULL));
   }
 
-  std::string CO() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CO", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string CO() const;
 /** (Optional) Optional parameters specific to the sound compression format used.
  *  Note: At the time of publication, no standard values have been defined for the CO and CP
  *  entries.
@@ -622,13 +586,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CP", "", NULL));
   }
 
-  SkPdfObject* CP() const {
-    SkPdfObject* ret;
-    if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CP", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfObject* CP() const;
 };
 
 #endif  // __DEFINED__SkPdfSoundObjectDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfSourceInformationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfSourceInformationDictionary_autogen.cpp
new file mode 100644
index 0000000..6bf902e
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfSourceInformationDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfSourceInformationDictionary_autogen.h"
+
+std::string SkPdfSourceInformationDictionary::getAUAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AU", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfSourceInformationDictionary::getAUAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AU", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDate SkPdfSourceInformationDictionary::TS() const {
+  SkPdfDate ret;
+  if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfDate();
+}
+
+SkPdfDate SkPdfSourceInformationDictionary::E() const {
+  SkPdfDate ret;
+  if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "E", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfDate();
+}
+
+long SkPdfSourceInformationDictionary::S() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfDictionary* SkPdfSourceInformationDictionary::C() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfSourceInformationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfSourceInformationDictionary_autogen.h
index 27d01d5..83cfb9a 100644
--- a/experimental/PdfViewer/autogen/SkPdfSourceInformationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfSourceInformationDictionary_autogen.h
@@ -538,26 +538,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getAUAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AU", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getAUAsString() const;
   bool isAUADictionary() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AU", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getAUAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AU", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getAUAsDictionary() const;
 /** (Optional) A time stamp giving the most recent date and time at which the content
  *  set's contents were known to be up to date with the source data.
 **/
@@ -565,13 +553,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TS", "", NULL));
   }
 
-  SkPdfDate TS() const {
-    SkPdfDate ret;
-    if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfDate();
-  }
-
+  SkPdfDate TS() const;
 /** (Optional) An expiration stamp giving the date and time at which the content set's
  *  contents should be considered out of date with the source data.
 **/
@@ -579,13 +561,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "E", "", NULL));
   }
 
-  SkPdfDate E() const {
-    SkPdfDate ret;
-    if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "E", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfDate();
-  }
-
+  SkPdfDate E() const;
 /** (Optional) A code indicating the type of form submission, if any, by which the source
  *  data was accessed (see "Submit-Form Actions" on page 550):
  *      0    Not accessed via a form submission
@@ -598,13 +574,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  long S() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long S() const;
 /** (Optional; must be an indirect reference) A command dictionary (see "Command Dic-
  *  tionaries" on page 672) describing the command that caused the source data to be
  *  retrieved. This entry should be present only in source information dictionaries associ-
@@ -614,13 +584,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", NULL));
   }
 
-  SkPdfDictionary* C() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* C() const;
 };
 
 #endif  // __DEFINED__SkPdfSourceInformationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfSquareOrCircleAnnotation_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfSquareOrCircleAnnotation_autogen.cpp
new file mode 100644
index 0000000..cdf2f68
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfSquareOrCircleAnnotation_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfSquareOrCircleAnnotation_autogen.h"
+
+std::string SkPdfSquareOrCircleAnnotation::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfSquareOrCircleAnnotation::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfSquareOrCircleAnnotation::BS() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfSquareOrCircleAnnotation::IC() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IC", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfSquareOrCircleAnnotation_autogen.h b/experimental/PdfViewer/autogen/SkPdfSquareOrCircleAnnotation_autogen.h
index 1c746d6..ce9864f 100644
--- a/experimental/PdfViewer/autogen/SkPdfSquareOrCircleAnnotation_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfSquareOrCircleAnnotation_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required) The text to be displayed in the pop-up window when the annotation
  *  is opened. Carriage returns may be used to separate the text into paragraphs.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Optional) A border style dictionary (see Table 8.12 on page 495) specifying the
  *  line width and dash pattern to be used in drawing the rectangle or ellipse.
  *  Note: The annotation dictionary's AP entry, if present, takes precedence over the
@@ -563,13 +551,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BS", "", NULL));
   }
 
-  SkPdfDictionary* BS() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* BS() const;
 /** (Optional; PDF 1.4) An array of three numbers in the range 0.0 to 1.0 specifying
  *  the components, in the DeviceRGB color space, of the interior color with which to
  *  fill the annotation's rectangle or ellipse (see Table 8.19). If this entry is absent,
@@ -579,13 +561,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IC", "", NULL));
   }
 
-  SkPdfArray* IC() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IC", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* IC() const;
 };
 
 #endif  // __DEFINED__SkPdfSquareOrCircleAnnotation
diff --git a/experimental/PdfViewer/autogen/SkPdfStandardSecurityHandlerDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfStandardSecurityHandlerDictionary_autogen.cpp
new file mode 100644
index 0000000..d8adbcf
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfStandardSecurityHandlerDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfStandardSecurityHandlerDictionary_autogen.h"
+
+double SkPdfStandardSecurityHandlerDictionary::R() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfStandardSecurityHandlerDictionary::O() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfStandardSecurityHandlerDictionary::U() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "U", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfStandardSecurityHandlerDictionary::P() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfStandardSecurityHandlerDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfStandardSecurityHandlerDictionary_autogen.h
index 55ba347..079580c 100644
--- a/experimental/PdfViewer/autogen/SkPdfStandardSecurityHandlerDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfStandardSecurityHandlerDictionary_autogen.h
@@ -536,13 +536,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", NULL));
   }
 
-  double R() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double R() const;
 /** (Required) A 32-byte string, based on both the owner and user passwords, that is used in
  *  computing the encryption key and in determining whether a valid owner password was
  *  entered. For more information, see "Encryption Key Algorithm" on page 78 and "Pass-
@@ -552,13 +546,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", NULL));
   }
 
-  std::string O() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string O() const;
 /** (Required) A 32-byte string, based on the user password, that is used in determining
  *  whether to prompt the user for a password and, if so, whether a valid user or owner pass-
  *  word was entered. For more information, see "Password Algorithms" on page 79.
@@ -567,13 +555,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "U", "", NULL));
   }
 
-  std::string U() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "U", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string U() const;
 /** (Required) A set of flags specifying which operations are permitted when the document is
  *  opened with user access (see Table 3.15).
 **/
@@ -581,13 +563,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", NULL));
   }
 
-  long P() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long P() const;
 };
 
 #endif  // __DEFINED__SkPdfStandardSecurityHandlerDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfStandardStructureDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfStandardStructureDictionary_autogen.cpp
new file mode 100644
index 0000000..23829b5
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfStandardStructureDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfStandardStructureDictionary_autogen.h"
+
+std::string SkPdfStandardStructureDictionary::Placement() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Placement", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfStandardStructureDictionary::WritingMode() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WritingMode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfStandardStructureDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfStandardStructureDictionary_autogen.h
index 4f08d5e..281ff19 100644
--- a/experimental/PdfViewer/autogen/SkPdfStandardStructureDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfStandardStructureDictionary_autogen.h
@@ -569,13 +569,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Placement", "", NULL));
   }
 
-  std::string Placement() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Placement", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Placement() const;
 /** (Optional) The directions of layout progression for packing of ILSEs (inline
  *  progression) and stacking of BLSEs (block progression):
  *      LrTb         Inline progression from left to right; block progression from
@@ -605,13 +599,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WritingMode", "", NULL));
   }
 
-  std::string WritingMode() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "WritingMode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string WritingMode() const;
 };
 
 #endif  // __DEFINED__SkPdfStandardStructureDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfStreamCommonDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfStreamCommonDictionary_autogen.cpp
new file mode 100644
index 0000000..5b4b8fb
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfStreamCommonDictionary_autogen.cpp
@@ -0,0 +1,72 @@
+#include "SkPdfStreamCommonDictionary_autogen.h"
+
+long SkPdfStreamCommonDictionary::Length() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfStreamCommonDictionary::getFilterAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Filter", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfStreamCommonDictionary::getFilterAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Filter", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfStreamCommonDictionary::getDecodeParmsAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DecodeParms", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfStreamCommonDictionary::getDecodeParmsAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DecodeParms", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfFileSpec SkPdfStreamCommonDictionary::F() const {
+  SkPdfFileSpec ret;
+  if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFileSpec();
+}
+
+std::string SkPdfStreamCommonDictionary::getFFilterAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FFilter", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfStreamCommonDictionary::getFFilterAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FFilter", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfStreamCommonDictionary::getFDecodeParmsAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FDecodeParms", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfStreamCommonDictionary::getFDecodeParmsAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FDecodeParms", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfStreamCommonDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfStreamCommonDictionary_autogen.h
index b1f86c5..fddbb6f 100644
--- a/experimental/PdfViewer/autogen/SkPdfStreamCommonDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfStreamCommonDictionary_autogen.h
@@ -536,13 +536,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length", "", NULL));
   }
 
-  long Length() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Length", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Length() const;
 /** (Optional) The name of a filter to be applied in processing the stream
  *  data found between the keywords stream and endstream, or an array
  *  of such names. Multiple filters should be specified in the order in
@@ -558,26 +552,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getFilterAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Filter", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getFilterAsName() const;
   bool isFilterAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Filter", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getFilterAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Filter", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getFilterAsArray() const;
 /** (Optional) A parameter dictionary, or an array of such dictionaries,
  *  used by the filters specified by Filter. If there is only one filter and that
  *  filter has parameters, DecodeParms must be set to the filter's parame-
@@ -601,26 +583,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getDecodeParmsAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DecodeParms", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getDecodeParmsAsDictionary() const;
   bool isDecodeParmsAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DecodeParms", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getDecodeParmsAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DecodeParms", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getDecodeParmsAsArray() const;
 /** (Optional; PDF 1.2) The file containing the stream data. If this entry
  *  is present, the bytes between stream and endstream are ignored, the
  *  filters are specified by FFilter rather than Filter, and the filter parame-
@@ -632,13 +602,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  SkPdfFileSpec F() const {
-    SkPdfFileSpec ret;
-    if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFileSpec();
-  }
-
+  SkPdfFileSpec F() const;
 /** (Optional; PDF 1.2) The name of a filter to be applied in processing
  *  the data found in the stream's external file, or an array of such names.
  *  The same rules apply as for Filter.
@@ -653,26 +617,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getFFilterAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FFilter", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getFFilterAsName() const;
   bool isFFilterAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FFilter", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getFFilterAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FFilter", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getFFilterAsArray() const;
 /** (Optional; PDF 1.2) A parameter dictionary, or an array of such dic-
  *  tionaries, used by the filters specified by FFilter. The same rules apply
  *  as for DecodeParms.
@@ -687,26 +639,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getFDecodeParmsAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FDecodeParms", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getFDecodeParmsAsDictionary() const;
   bool isFDecodeParmsAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FDecodeParms", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getFDecodeParmsAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FDecodeParms", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getFDecodeParmsAsArray() const;
 };
 
 #endif  // __DEFINED__SkPdfStreamCommonDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfStream_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfStream_autogen.cpp
new file mode 100644
index 0000000..b1fdd27
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfStream_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfStream_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/SkPdfString_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfString_autogen.cpp
new file mode 100644
index 0000000..a967633
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfString_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfString_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/SkPdfStructureElementAccessDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfStructureElementAccessDictionary_autogen.cpp
new file mode 100644
index 0000000..7db9df2
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfStructureElementAccessDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfStructureElementAccessDictionary_autogen.h"
+
+long SkPdfStructureElementAccessDictionary::StructParent() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfStructureElementAccessDictionary::StructParents() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfStructureElementAccessDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfStructureElementAccessDictionary_autogen.h
index 1dc8bb0..fb868a5 100644
--- a/experimental/PdfViewer/autogen/SkPdfStructureElementAccessDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfStructureElementAccessDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParent", "", NULL));
   }
 
-  long StructParent() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long StructParent() const;
 /** (Required for all content streams containing marked-content sequences that are
  *  structural content items; PDF 1.3) The integer key of this object's entry in the
  *  structural parent tree.
@@ -550,13 +544,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParents", "", NULL));
   }
 
-  long StructParents() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long StructParents() const;
 };
 
 #endif  // __DEFINED__SkPdfStructureElementAccessDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfStructureElementDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfStructureElementDictionary_autogen.cpp
new file mode 100644
index 0000000..0126024
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfStructureElementDictionary_autogen.cpp
@@ -0,0 +1,100 @@
+#include "SkPdfStructureElementDictionary_autogen.h"
+
+std::string SkPdfStructureElementDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfStructureElementDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfStructureElementDictionary::P() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfStructureElementDictionary::ID() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfStructureElementDictionary::Pg() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pg", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfObject* SkPdfStructureElementDictionary::K() const {
+  SkPdfObject* ret;
+  if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfObject* SkPdfStructureElementDictionary::A() const {
+  SkPdfObject* ret;
+  if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfStructureElementDictionary::getCAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfStructureElementDictionary::getCAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfStructureElementDictionary::R() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfStructureElementDictionary::T() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfStructureElementDictionary::Lang() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Lang", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfStructureElementDictionary::Alt() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Alt", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfStructureElementDictionary::ActualText() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ActualText", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfStructureElementDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfStructureElementDictionary_autogen.h
index b7b90da..f666dd4 100644
--- a/experimental/PdfViewer/autogen/SkPdfStructureElementDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfStructureElementDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The structure type, a name object identifying the nature of the
  *  structure element and its role within the document, such as a chapter,
  *  paragraph, or footnote (see Section 9.6.2, "Structure Types"). Names of
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required; must be an indirect reference) The structure element that is the
  *  immediate parent of this one in the structure hierarchy.
 **/
@@ -562,13 +550,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", NULL));
   }
 
-  SkPdfDictionary* P() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* P() const;
 /** (Optional) The element identifier, a string designating this structure
  *  element. The string must be unique among all elements in the docu-
  *  ment's structure hierarchy. The IDTree entry in the structure tree root
@@ -579,13 +561,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", NULL));
   }
 
-  std::string ID() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string ID() const;
 /** (Optional; must be an indirect reference) A page object representing a
  *  page on which some or all of the content items designated by the K entry
  *  are rendered.
@@ -594,13 +570,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pg", "", NULL));
   }
 
-  SkPdfDictionary* Pg() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Pg", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Pg() const;
 /** (Optional) The contents of this structure element, which may consist of
  *  one or more marked-content sequences, PDF objects, and other struc-
  *  ture elements. The value of this entry may be any of the following:
@@ -618,13 +588,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", NULL));
   }
 
-  SkPdfObject* K() const {
-    SkPdfObject* ret;
-    if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfObject* K() const;
 /** (Optional) The attribute object or objects, if any, associated with this
  *  structure element. Each attribute object is either a dictionary or a
  *  stream; the value of this entry may be either a single attribute object or
@@ -636,13 +600,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", NULL));
   }
 
-  SkPdfObject* A() const {
-    SkPdfObject* ret;
-    if (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "A", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfObject* A() const;
 /** (Optional) The attribute class or classes, if any, to which this structure
  *  element belongs. The value of this entry may be either a single class
  *  name or an array of class names together with their revision numbers
@@ -661,26 +619,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getCAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getCAsName() const;
   bool isCAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getCAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getCAsArray() const;
 /** (Optional) The current revision number of this structure element (see
  *  "Attribute Revision Numbers" on page 606). The value must be a non-
  *  negative integer. Default value: 0.
@@ -689,13 +635,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", NULL));
   }
 
-  long R() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long R() const;
 /** (Optional) The title of the structure element, a text string representing it
  *  in human-readable form. The title should characterize the specific struc-
  *  ture element, such as Chapter 1, rather than merely a generic element
@@ -705,13 +645,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", NULL));
   }
 
-  std::string T() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string T() const;
 /** (Optional; PDF 1.4) A language identifier specifying the natural language
  *  for all text in the structure element except where overridden by language
  *  specifications for nested structure elements or marked content (see Sec-
@@ -722,13 +656,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Lang", "", NULL));
   }
 
-  std::string Lang() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Lang", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Lang() const;
 /** (Optional) An alternate description of the structure element and its
  *  children in human-readable form, useful when extracting the docu-
  *  ment's contents in support of accessibility to disabled users or for other
@@ -738,13 +666,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Alt", "", NULL));
   }
 
-  std::string Alt() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Alt", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Alt() const;
 /** (Optional; PDF 1.4) Text that is an exact replacement for the structure
  *  element and its children. This replacement text (which should apply to
  *  as small a piece of content as possible) is useful when extracting the doc-
@@ -755,13 +677,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ActualText", "", NULL));
   }
 
-  std::string ActualText() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ActualText", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string ActualText() const;
 };
 
 #endif  // __DEFINED__SkPdfStructureElementDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfStructureTreeRootDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfStructureTreeRootDictionary_autogen.cpp
new file mode 100644
index 0000000..b6c9442
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfStructureTreeRootDictionary_autogen.cpp
@@ -0,0 +1,72 @@
+#include "SkPdfStructureTreeRootDictionary_autogen.h"
+
+std::string SkPdfStructureTreeRootDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfStructureTreeRootDictionary::getKAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfStructureTreeRootDictionary::getKAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfStructureTreeRootDictionary::getIDTreeAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IDTree", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfTree* SkPdfStructureTreeRootDictionary::getIDTreeAsTree() const {
+  SkPdfTree* ret = NULL;
+  if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IDTree", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+double SkPdfStructureTreeRootDictionary::getParentTreeAsNumber() const {
+  double ret = 0;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ParentTree", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfTree* SkPdfStructureTreeRootDictionary::getParentTreeAsTree() const {
+  SkPdfTree* ret = NULL;
+  if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ParentTree", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfStructureTreeRootDictionary::ParentTreeNextKey() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ParentTreeNextKey", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfDictionary* SkPdfStructureTreeRootDictionary::RoleMap() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RoleMap", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfStructureTreeRootDictionary::ClassMap() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ClassMap", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfStructureTreeRootDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfStructureTreeRootDictionary_autogen.h
index 83f337e..f722733 100644
--- a/experimental/PdfViewer/autogen/SkPdfStructureTreeRootDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfStructureTreeRootDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Optional) The immediate child or children of the structure tree root in
  *  the structure hierarchy. The value may be either a dictionary represent-
  *  ing a single structure element or an array of such dictionaries.
@@ -553,26 +547,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getKAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getKAsDictionary() const;
   bool isKAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getKAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "K", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getKAsArray() const;
 /** (Required if any structure elements have element identifiers) A name tree
  *  that maps element identifiers (see Table 9.10) to the structure elements
  *  they denote.
@@ -587,26 +569,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getIDTreeAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IDTree", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getIDTreeAsName() const;
   bool isIDTreeATree() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IDTree", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfTree* getIDTreeAsTree() const {
-    SkPdfTree* ret = NULL;
-    if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IDTree", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfTree* getIDTreeAsTree() const;
 /** (Required if any structure element contains PDF objects or marked-content
  *  sequences as content items) A number tree (see Section 3.8.5, "Number
  *  Trees") used in finding the structure elements to which content items
@@ -635,26 +605,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Real || ret->podofo()->GetDataType() == ePdfDataType_Number;
   }
 
-  double getParentTreeAsNumber() const {
-    double ret = 0;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ParentTree", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double getParentTreeAsNumber() const;
   bool isParentTreeATree() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ParentTree", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfTree* getParentTreeAsTree() const {
-    SkPdfTree* ret = NULL;
-    if (TreeFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ParentTree", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfTree* getParentTreeAsTree() const;
 /** (Optional) An integer greater than any key in the parent tree, to be used
  *  as a key for the next entry added to the tree.
 **/
@@ -662,13 +620,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ParentTreeNextKey", "", NULL));
   }
 
-  long ParentTreeNextKey() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ParentTreeNextKey", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long ParentTreeNextKey() const;
 /** (Optional) A dictionary mapping the names of structure types used in
  *  the document to their approximate equivalents in the set of standard
  *  structure types (see Section 9.7.4, "Standard Structure Types").
@@ -677,13 +629,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RoleMap", "", NULL));
   }
 
-  SkPdfDictionary* RoleMap() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RoleMap", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* RoleMap() const;
 /** (Optional) A dictionary mapping name objects designating attribute
  *  classes to the corresponding attribute objects or arrays of attribute ob-
  *  jects (see "Attribute Classes" on page 605).
@@ -692,13 +638,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ClassMap", "", NULL));
   }
 
-  SkPdfDictionary* ClassMap() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ClassMap", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* ClassMap() const;
 };
 
 #endif  // __DEFINED__SkPdfStructureTreeRootDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfSubmitFormActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfSubmitFormActionDictionary_autogen.cpp
new file mode 100644
index 0000000..0aa92a8
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfSubmitFormActionDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfSubmitFormActionDictionary_autogen.h"
+
+std::string SkPdfSubmitFormActionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfFileSpec SkPdfSubmitFormActionDictionary::F() const {
+  SkPdfFileSpec ret;
+  if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFileSpec();
+}
+
+SkPdfArray* SkPdfSubmitFormActionDictionary::Fields() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfSubmitFormActionDictionary::Flags() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Flags", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfSubmitFormActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfSubmitFormActionDictionary_autogen.h
index 178a223..3a7d6a6 100644
--- a/experimental/PdfViewer/autogen/SkPdfSubmitFormActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfSubmitFormActionDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required) A URL file specification (see Section 3.10.4, "URL Speci-
  *  fications") giving the uniform resource locator (URL) of the script
  *  at the Web server that will process the submission.
@@ -547,13 +541,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  SkPdfFileSpec F() const {
-    SkPdfFileSpec ret;
-    if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFileSpec();
-  }
-
+  SkPdfFileSpec F() const;
 /** (Optional) An array identifying which fields to include in the sub-
  *  mission or which to exclude, depending on the setting of the
  *  Include/Exclude flag in the Flags entry (see Table 8.62). Each ele-
@@ -571,13 +559,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", NULL));
   }
 
-  SkPdfArray* Fields() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Fields", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Fields() const;
 /** (Optional; inheritable) A set of flags specifying various characteris-
  *  tics of the action (see Table 8.62). Default value: 0.
 **/
@@ -585,13 +567,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Flags", "", NULL));
   }
 
-  long Flags() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Flags", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Flags() const;
 };
 
 #endif  // __DEFINED__SkPdfSubmitFormActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfTableAttributesDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfTableAttributesDictionary_autogen.cpp
new file mode 100644
index 0000000..dbdb373
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfTableAttributesDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfTableAttributesDictionary_autogen.h"
+
+long SkPdfTableAttributesDictionary::RowSpan() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RowSpan", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfTableAttributesDictionary::ColSpan() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColSpan", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfTableAttributesDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfTableAttributesDictionary_autogen.h
index 2fd1fc0..a73508b 100644
--- a/experimental/PdfViewer/autogen/SkPdfTableAttributesDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfTableAttributesDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RowSpan", "", NULL));
   }
 
-  long RowSpan() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "RowSpan", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long RowSpan() const;
 /** (Optional) The number of columns in the enclosing table that are spanned by
  *  the cell. The cell expands by adding columns in the inline-progression direction
  *  specified by the table's WritingMode attribute. Default value: 1.
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColSpan", "", NULL));
   }
 
-  long ColSpan() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ColSpan", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long ColSpan() const;
 };
 
 #endif  // __DEFINED__SkPdfTableAttributesDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfTextAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfTextAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..6b493a6
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfTextAnnotationDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfTextAnnotationDictionary_autogen.h"
+
+std::string SkPdfTextAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfTextAnnotationDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+bool SkPdfTextAnnotationDictionary::Open() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Open", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+std::string SkPdfTextAnnotationDictionary::Name() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfTextAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfTextAnnotationDictionary_autogen.h
index a52d7bf..f164423 100644
--- a/experimental/PdfViewer/autogen/SkPdfTextAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfTextAnnotationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required) The text to be displayed in the pop-up window when the annotation
  *  is opened. Carriage returns may be used to separate the text into paragraphs.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Optional) A flag specifying whether the annotation should initially be displayed
  *  open. Default value: false (closed).
 **/
@@ -560,13 +548,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Open", "", NULL));
   }
 
-  bool Open() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Open", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool Open() const;
 /** (Optional) The name of an icon to be used in displaying the annotation. Viewer
  *  applications should provide predefined icon appearances for at least the follow-
  *  ing standard names:
@@ -581,13 +563,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", NULL));
   }
 
-  std::string Name() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Name() const;
 };
 
 #endif  // __DEFINED__SkPdfTextAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfTextFieldDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfTextFieldDictionary_autogen.cpp
new file mode 100644
index 0000000..ca3187c
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfTextFieldDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfTextFieldDictionary_autogen.h"
+
+long SkPdfTextFieldDictionary::MaxLen() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MaxLen", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfTextFieldDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfTextFieldDictionary_autogen.h
index 56c6472..30a7e41 100644
--- a/experimental/PdfViewer/autogen/SkPdfTextFieldDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfTextFieldDictionary_autogen.h
@@ -531,13 +531,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MaxLen", "", NULL));
   }
 
-  long MaxLen() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MaxLen", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long MaxLen() const;
 };
 
 #endif  // __DEFINED__SkPdfTextFieldDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfThreadActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfThreadActionDictionary_autogen.cpp
new file mode 100644
index 0000000..8544c8c
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfThreadActionDictionary_autogen.cpp
@@ -0,0 +1,51 @@
+#include "SkPdfThreadActionDictionary_autogen.h"
+
+std::string SkPdfThreadActionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfFileSpec SkPdfThreadActionDictionary::F() const {
+  SkPdfFileSpec ret;
+  if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFileSpec();
+}
+
+SkPdfDictionary* SkPdfThreadActionDictionary::getDAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfThreadActionDictionary::getDAsInteger() const {
+  long ret = 0;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfThreadActionDictionary::getDAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfThreadActionDictionary::getBAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "B", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfThreadActionDictionary::getBAsInteger() const {
+  long ret = 0;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "B", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfThreadActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfThreadActionDictionary_autogen.h
index 3158d85..5b5a813 100644
--- a/experimental/PdfViewer/autogen/SkPdfThreadActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfThreadActionDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Optional) The file containing the desired thread. If this entry is absent, the
  *  thread is in the current file.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  SkPdfFileSpec F() const {
-    SkPdfFileSpec ret;
-    if (FileSpecFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFileSpec();
-  }
-
+  SkPdfFileSpec F() const;
 /** (Required) The desired destination thread, specified in one of the following
  *  forms:
  *  *  An indirect reference to a thread dictionary (see Section 8.3.2, "Articles").
@@ -574,39 +562,21 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getDAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getDAsDictionary() const;
   bool isDAInteger() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Number;
   }
 
-  long getDAsInteger() const {
-    long ret = 0;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long getDAsInteger() const;
   bool isDAString() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getDAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getDAsString() const;
 /** (Optional) The desired bead in the destination thread, specified in one of the
  *  following forms:
  *  *  An indirect reference to a bead dictionary (see Section 8.3.2, "Articles"). In
@@ -624,26 +594,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getBAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "B", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getBAsDictionary() const;
   bool isBAInteger() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "B", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Number;
   }
 
-  long getBAsInteger() const {
-    long ret = 0;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "B", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long getBAsInteger() const;
 };
 
 #endif  // __DEFINED__SkPdfThreadActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfThreadDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfThreadDictionary_autogen.cpp
new file mode 100644
index 0000000..d3e75f8
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfThreadDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfThreadDictionary_autogen.h"
+
+std::string SkPdfThreadDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfThreadDictionary::F() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfThreadDictionary::I() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "I", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfThreadDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfThreadDictionary_autogen.h
index 98ccf37..afb1813 100644
--- a/experimental/PdfViewer/autogen/SkPdfThreadDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfThreadDictionary_autogen.h
@@ -532,26 +532,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required; must be an indirect reference) The first bead in the thread.
 **/
   bool has_F() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  SkPdfDictionary* F() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* F() const;
 /** (Optional) A thread information dictionary containing information about the
  *  thread, such as its title, author, and creation date. The contents of this dictionary are
  *  similar to those of the document information dictionary (see Section 9.2.1, "Docu-
@@ -561,13 +549,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "I", "", NULL));
   }
 
-  SkPdfDictionary* I() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "I", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* I() const;
 };
 
 #endif  // __DEFINED__SkPdfThreadDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfTransitionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfTransitionDictionary_autogen.cpp
new file mode 100644
index 0000000..dcd16e5
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfTransitionDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfTransitionDictionary_autogen.h"
+
+std::string SkPdfTransitionDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+double SkPdfTransitionDictionary::D() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfTransitionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfTransitionDictionary::Dm() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dm", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfTransitionDictionary::M() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "M", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+double SkPdfTransitionDictionary::Di() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Di", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfTransitionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfTransitionDictionary_autogen.h
index 64cbeb6..e3fa5b5 100644
--- a/experimental/PdfViewer/autogen/SkPdfTransitionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfTransitionDictionary_autogen.h
@@ -532,26 +532,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Optional) The duration of the transition effect, in seconds. Default value: 1.
 **/
   bool has_D() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", NULL));
   }
 
-  double D() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double D() const;
 /** (Optional) The transition style to use when moving to this page from another during a
  *  presentation:
  *     Split       Two lines sweep across the screen, revealing the new page. The lines may
@@ -578,13 +566,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Optional; Split and Blinds transition styles only) The dimension in which the specified
  *  transition effect occurs:
  *       H         Horizontal
@@ -595,13 +577,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dm", "", NULL));
   }
 
-  std::string Dm() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Dm", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Dm() const;
 /** (Optional; Split and Box transition styles only) The direction of motion for the specified
  *  transition effect:
  *       I         Inward from the edges of the page
@@ -612,13 +588,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "M", "", NULL));
   }
 
-  std::string M() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "M", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string M() const;
 /** (Optional; Wipe and Glitter transition styles only) The direction in which the specified
  *  transition effect moves, expressed in degrees counterclockwise starting from a left-to-
  *  right direction. (Note that this differs from the page object's Rotate entry, which is
@@ -634,13 +604,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Di", "", NULL));
   }
 
-  double Di() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Di", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double Di() const;
 };
 
 #endif  // __DEFINED__SkPdfTransitionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfTransparencyGroupDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfTransparencyGroupDictionary_autogen.cpp
new file mode 100644
index 0000000..cb81161
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfTransparencyGroupDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfTransparencyGroupDictionary_autogen.h"
+
+std::string SkPdfTransparencyGroupDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfTransparencyGroupDictionary::getCSAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfTransparencyGroupDictionary::getCSAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfTransparencyGroupDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfTransparencyGroupDictionary_autogen.h
index e883767..8424b4a 100644
--- a/experimental/PdfViewer/autogen/SkPdfTransparencyGroupDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfTransparencyGroupDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Sometimes required, as discussed below) The group color space, which is used for
  *  the following purposes:
  *  *  As the color space into which colors are converted when painted into the
@@ -581,26 +575,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getCSAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getCSAsName() const;
   bool isCSAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CS", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getCSAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getCSAsArray() const;
 };
 
 #endif  // __DEFINED__SkPdfTransparencyGroupDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfTrapNetworkAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfTrapNetworkAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..e59e974
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfTrapNetworkAnnotationDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfTrapNetworkAnnotationDictionary_autogen.h"
+
+std::string SkPdfTrapNetworkAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfTrapNetworkAnnotationDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDate SkPdfTrapNetworkAnnotationDictionary::LastModified() const {
+  SkPdfDate ret;
+  if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastModified", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfDate();
+}
+
+SkPdfArray* SkPdfTrapNetworkAnnotationDictionary::Version() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Version", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfTrapNetworkAnnotationDictionary::AnnotStates() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AnnotStates", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfTrapNetworkAnnotationDictionary::FontFauxing() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontFauxing", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfTrapNetworkAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfTrapNetworkAnnotationDictionary_autogen.h
index 6c7cf0e..79f3cbe 100644
--- a/experimental/PdfViewer/autogen/SkPdfTrapNetworkAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfTrapNetworkAnnotationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Optional; PDF 1.4) An alternate description of the annotation's contents in
  *  human-readable form, useful when extracting the document's contents in
  *  support of accessibility to disabled users or for other purposes (see Section
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Required if Version and AnnotStates are absent; must be absent if Version and
  *  AnnotStates are present; PDF 1.4) The date and time (see Section 3.8.2,
  *  "Dates") when the trap network was most recently modified.
@@ -563,13 +551,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastModified", "", NULL));
   }
 
-  SkPdfDate LastModified() const {
-    SkPdfDate ret;
-    if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastModified", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfDate();
-  }
-
+  SkPdfDate LastModified() const;
 /** (Required if AnnotStates is present; must be absent if LastModified is present)
  *  An unordered array of all objects present in the page description at the time
  *  the trap networks were generated and that, if changed, could affect the
@@ -588,13 +570,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Version", "", NULL));
   }
 
-  SkPdfArray* Version() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Version", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Version() const;
 /** (Required if Version is present; must be absent if LastModified is present) An
  *  array of name objects representing the appearance states (value of the AS
  *  entry) for annotations associated with the page. The appearance states must
@@ -607,13 +583,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AnnotStates", "", NULL));
   }
 
-  SkPdfArray* AnnotStates() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AnnotStates", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* AnnotStates() const;
 /** (Optional) An array of font dictionaries representing fonts that were "fauxed"
  *  (replaced by substitute fonts) during the generation of trap networks for the
  *  page.
@@ -622,13 +592,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontFauxing", "", NULL));
   }
 
-  SkPdfArray* FontFauxing() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontFauxing", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* FontFauxing() const;
 };
 
 #endif  // __DEFINED__SkPdfTrapNetworkAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfTrapNetworkAppearanceStreamDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfTrapNetworkAppearanceStreamDictionary_autogen.cpp
new file mode 100644
index 0000000..729d96c
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfTrapNetworkAppearanceStreamDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfTrapNetworkAppearanceStreamDictionary_autogen.h"
+
+std::string SkPdfTrapNetworkAppearanceStreamDictionary::PCM() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PCM", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfTrapNetworkAppearanceStreamDictionary::SeparationColorNames() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SeparationColorNames", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfTrapNetworkAppearanceStreamDictionary::TrapRegions() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TrapRegions", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfTrapNetworkAppearanceStreamDictionary::TrapStyles() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TrapStyles", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfTrapNetworkAppearanceStreamDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfTrapNetworkAppearanceStreamDictionary_autogen.h
index 289058c..5b4c745 100644
--- a/experimental/PdfViewer/autogen/SkPdfTrapNetworkAppearanceStreamDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfTrapNetworkAppearanceStreamDictionary_autogen.h
@@ -536,13 +536,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PCM", "", NULL));
   }
 
-  std::string PCM() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PCM", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string PCM() const;
 /** (Optional) An array of names identifying the colorants that were
  *  assumed when this network was created; equivalent to the Post-
  *  Script page device parameter of the same name (see Section 6.2.5 of
@@ -555,13 +549,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SeparationColorNames", "", NULL));
   }
 
-  SkPdfArray* SeparationColorNames() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SeparationColorNames", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* SeparationColorNames() const;
 /** (Optional) An array of indirect references to TrapRegion objects
  *  defining the page's trapping zones and the associated trapping
  *  parameters, as described in Adobe Technical Note #5620, Portable
@@ -575,13 +563,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TrapRegions", "", NULL));
   }
 
-  SkPdfArray* TrapRegions() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TrapRegions", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* TrapRegions() const;
 /** (Optional) A human-readable text string that applications can use
  *  to describe this trap network to the user (for example, to allow
  *  switching between trap networks).
@@ -590,13 +572,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TrapStyles", "", NULL));
   }
 
-  std::string TrapStyles() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TrapStyles", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string TrapStyles() const;
 };
 
 #endif  // __DEFINED__SkPdfTrapNetworkAppearanceStreamDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfTrueTypeFontDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfTrueTypeFontDictionary_autogen.cpp
new file mode 100644
index 0000000..1929a9e
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfTrueTypeFontDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfTrueTypeFontDictionary_autogen.h"
+
+std::string SkPdfTrueTypeFontDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfTrueTypeFontDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfTrueTypeFontDictionary_autogen.h
index 8c2297f..c1bb7ef 100644
--- a/experimental/PdfViewer/autogen/SkPdfTrueTypeFontDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfTrueTypeFontDictionary_autogen.h
@@ -36,13 +36,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 };
 
 #endif  // __DEFINED__SkPdfTrueTypeFontDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType0FontDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType0FontDictionary_autogen.cpp
new file mode 100644
index 0000000..472b903
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType0FontDictionary_autogen.cpp
@@ -0,0 +1,51 @@
+#include "SkPdfType0FontDictionary_autogen.h"
+
+std::string SkPdfType0FontDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfType0FontDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfType0FontDictionary::BaseFont() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BaseFont", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfType0FontDictionary::getEncodingAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfType0FontDictionary::getEncodingAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfType0FontDictionary::DescendantFonts() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DescendantFonts", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfType0FontDictionary::ToUnicode() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ToUnicode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType0FontDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType0FontDictionary_autogen.h
index c556575..4cbcd63 100644
--- a/experimental/PdfViewer/autogen/SkPdfType0FontDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType0FontDictionary_autogen.h
@@ -49,26 +49,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The type of font; must be Type0 for a Type 0 font.
 **/
   bool has_Subtype() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required) The PostScript name of the font. In principle, this is an arbitrary
  *  name, since there is no font program associated directly with a Type 0 font
  *  dictionary. The conventions described here ensure maximum compatibility
@@ -83,13 +71,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BaseFont", "", NULL));
   }
 
-  std::string BaseFont() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BaseFont", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string BaseFont() const;
 /** (Required) The name of a predefined CMap, or a stream containing a CMap
  *  program, that maps character codes to font numbers and CIDs. If the descen-
  *  dant is a Type 2 CIDFont whose associated TrueType font program is not em-
@@ -106,26 +88,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getEncodingAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getEncodingAsName() const;
   bool isEncodingAStream() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return false;
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getEncodingAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getEncodingAsStream() const;
 /** (Required) An array specifying one or more fonts or CIDFonts that are
  *  descendants of this composite font. This array is indexed by the font number
  *  that is obtained by mapping a character code through the CMap specified in
@@ -137,13 +107,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DescendantFonts", "", NULL));
   }
 
-  SkPdfArray* DescendantFonts() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DescendantFonts", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* DescendantFonts() const;
 /** (Optional) A stream containing a CMap file that maps character codes to
  *  Unicode values (see Section 5.9, "ToUnicode CMaps").
 **/
@@ -151,13 +115,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ToUnicode", "", NULL));
   }
 
-  SkPdfStream* ToUnicode() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ToUnicode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* ToUnicode() const;
 };
 
 #endif  // __DEFINED__SkPdfType0FontDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType0FunctionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType0FunctionDictionary_autogen.cpp
new file mode 100644
index 0000000..c28bbc3
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType0FunctionDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfType0FunctionDictionary_autogen.h"
+
+SkPdfArray* SkPdfType0FunctionDictionary::Size() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Size", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfType0FunctionDictionary::BitsPerSample() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerSample", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType0FunctionDictionary::Order() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Order", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfType0FunctionDictionary::Encode() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfType0FunctionDictionary::Decode() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType0FunctionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType0FunctionDictionary_autogen.h
index a414a47..f14ec53 100644
--- a/experimental/PdfViewer/autogen/SkPdfType0FunctionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType0FunctionDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Size", "", NULL));
   }
 
-  SkPdfArray* Size() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Size", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Size() const;
 /** (Required) The number of bits used to represent each sample. (If the function
  *  has multiple output values, each one occupies BitsPerSample bits.) Valid
  *  values are 1, 2, 4, 8, 12, 16, 24, and 32.
@@ -547,13 +541,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerSample", "", NULL));
   }
 
-  long BitsPerSample() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerSample", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long BitsPerSample() const;
 /** (Optional) The order of interpolation between samples. Valid values are 1
  *  and 3, specifying linear and cubic spline interpolation, respectively. (See im-
  *  plementation note 26 in Appendix H.) Default value: 1.
@@ -562,13 +550,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Order", "", NULL));
   }
 
-  long Order() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Order", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Order() const;
 /** (Optional) An array of 2 x m numbers specifying the linear mapping of input
  *  values into the domain of the function's sample table. Default value:
  *  [0 (Size0 - 1) 0 (Size1 - 1) ...].
@@ -577,13 +559,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encode", "", NULL));
   }
 
-  SkPdfArray* Encode() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Encode() const;
 /** (Optional) An array of 2 x n numbers specifying the linear mapping of sam-
  *  ple values into the range appropriate for the function's output values. Default
  *  value: same as the value of Range.
@@ -592,13 +568,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", NULL));
   }
 
-  SkPdfArray* Decode() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Decode() const;
 };
 
 #endif  // __DEFINED__SkPdfType0FunctionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType10HalftoneDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType10HalftoneDictionary_autogen.cpp
new file mode 100644
index 0000000..3ac7e41
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType10HalftoneDictionary_autogen.cpp
@@ -0,0 +1,51 @@
+#include "SkPdfType10HalftoneDictionary_autogen.h"
+
+std::string SkPdfType10HalftoneDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfType10HalftoneDictionary::HalftoneType() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfType10HalftoneDictionary::HalftoneName() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfType10HalftoneDictionary::Xsquare() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Xsquare", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType10HalftoneDictionary::Ysquare() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ysquare", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfFunction SkPdfType10HalftoneDictionary::getTransferFunctionAsFunction() const {
+  SkPdfFunction ret = SkPdfFunction();
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+std::string SkPdfType10HalftoneDictionary::getTransferFunctionAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType10HalftoneDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType10HalftoneDictionary_autogen.h
index 30e6215..c993e0f 100644
--- a/experimental/PdfViewer/autogen/SkPdfType10HalftoneDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType10HalftoneDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) A code identifying the halftone type that this dictionary
  *  describes; must be 10 for this type of halftone.
 **/
@@ -546,52 +540,28 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", NULL));
   }
 
-  long HalftoneType() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long HalftoneType() const;
 /** (Optional) The name of the halftone dictionary.
 **/
   bool has_HalftoneName() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", NULL));
   }
 
-  std::string HalftoneName() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string HalftoneName() const;
 /** (Required) The side of square X, in device pixels; see below.
 **/
   bool has_Xsquare() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Xsquare", "", NULL));
   }
 
-  long Xsquare() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Xsquare", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Xsquare() const;
 /** (Required) The side of square Y, in device pixels; see below.
 **/
   bool has_Ysquare() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ysquare", "", NULL));
   }
 
-  long Ysquare() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ysquare", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Ysquare() const;
 /** (Optional) A transfer function, which overrides the current transfer
  *  function in the graphics state for the same component. This entry is
  *  required if the dictionary is a component of a type 5 halftone (see
@@ -610,26 +580,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfFunction getTransferFunctionAsFunction() const {
-    SkPdfFunction ret = SkPdfFunction();
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction getTransferFunctionAsFunction() const;
   bool isTransferFunctionAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getTransferFunctionAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getTransferFunctionAsName() const;
 };
 
 #endif  // __DEFINED__SkPdfType10HalftoneDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType16HalftoneDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType16HalftoneDictionary_autogen.cpp
new file mode 100644
index 0000000..2cc4180
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType16HalftoneDictionary_autogen.cpp
@@ -0,0 +1,65 @@
+#include "SkPdfType16HalftoneDictionary_autogen.h"
+
+std::string SkPdfType16HalftoneDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfType16HalftoneDictionary::HalftoneType() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfType16HalftoneDictionary::HalftoneName() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfType16HalftoneDictionary::Width() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType16HalftoneDictionary::Height() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType16HalftoneDictionary::Width2() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width2", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType16HalftoneDictionary::Height2() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height2", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfFunction SkPdfType16HalftoneDictionary::getTransferFunctionAsFunction() const {
+  SkPdfFunction ret = SkPdfFunction();
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+std::string SkPdfType16HalftoneDictionary::getTransferFunctionAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType16HalftoneDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType16HalftoneDictionary_autogen.h
index 4eacd84..c62b2e5 100644
--- a/experimental/PdfViewer/autogen/SkPdfType16HalftoneDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType16HalftoneDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) A code identifying the halftone type that this dictionary
  *  describes; must be 16 for this type of halftone.
 **/
@@ -546,26 +540,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", NULL));
   }
 
-  long HalftoneType() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long HalftoneType() const;
 /** (Optional) The name of the halftone dictionary.
 **/
   bool has_HalftoneName() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", NULL));
   }
 
-  std::string HalftoneName() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string HalftoneName() const;
 /** (Required) The width of the first (or only) rectangle in the threshold
  *  array, in device pixels.
 **/
@@ -573,13 +555,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", NULL));
   }
 
-  long Width() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Width() const;
 /** (Required) The height of the first (or only) rectangle in the threshold
  *  array, in device pixels.
 **/
@@ -587,13 +563,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", NULL));
   }
 
-  long Height() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Height() const;
 /** (Optional) The width of the optional second rectangle in the threshold
  *  array, in device pixels. If this entry is present, the Height2 entry must
  *  be present as well; if this entry is absent, the Height2 entry must also be
@@ -603,13 +573,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width2", "", NULL));
   }
 
-  long Width2() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width2", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Width2() const;
 /** (Optional) The height of the optional second rectangle in the threshold
  *  array, in device pixels.
 **/
@@ -617,13 +581,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height2", "", NULL));
   }
 
-  long Height2() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height2", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Height2() const;
 /** (Optional) A transfer function, which overrides the current transfer
  *  function in the graphics state for the same component. This entry is
  *  required if the dictionary is a component of a type 5 halftone (see
@@ -642,26 +600,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfFunction getTransferFunctionAsFunction() const {
-    SkPdfFunction ret = SkPdfFunction();
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction getTransferFunctionAsFunction() const;
   bool isTransferFunctionAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getTransferFunctionAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getTransferFunctionAsName() const;
 };
 
 #endif  // __DEFINED__SkPdfType16HalftoneDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType1FontDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType1FontDictionary_autogen.cpp
new file mode 100644
index 0000000..319cb55
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType1FontDictionary_autogen.cpp
@@ -0,0 +1,79 @@
+#include "SkPdfType1FontDictionary_autogen.h"
+
+std::string SkPdfType1FontDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfType1FontDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfType1FontDictionary::Name() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfType1FontDictionary::BaseFont() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BaseFont", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfType1FontDictionary::FirstChar() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FirstChar", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType1FontDictionary::LastChar() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastChar", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfType1FontDictionary::Widths() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Widths", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfType1FontDictionary::FontDescriptor() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontDescriptor", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfType1FontDictionary::getEncodingAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfType1FontDictionary::getEncodingAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfType1FontDictionary::ToUnicode() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ToUnicode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType1FontDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType1FontDictionary_autogen.h
index bb5382b..371acc7 100644
--- a/experimental/PdfViewer/autogen/SkPdfType1FontDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType1FontDictionary_autogen.h
@@ -40,26 +40,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The type of font; must be Type1 for a Type 1 font.
 **/
   bool has_Subtype() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required in PDF 1.0; optional otherwise) The name by which this font is ref-
  *  erenced in the Font subdictionary of the current resource dictionary.
  *  Note: This entry is obsolescent and its use is no longer recommended. (See
@@ -69,13 +57,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", NULL));
   }
 
-  std::string Name() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Name() const;
 /** (Required) The PostScript name of the font. For Type 1 fonts, this is usually
  *  the value of the FontName entry in the font program; for more information,
  *  see Section 5.2 of the PostScript Language Reference, Third Edition. The Post-
@@ -87,13 +69,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BaseFont", "", NULL));
   }
 
-  std::string BaseFont() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BaseFont", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string BaseFont() const;
 /** (Required except for the standard 14 fonts) The first character code defined in
  *  the font's Widths array.
 **/
@@ -101,13 +77,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FirstChar", "", NULL));
   }
 
-  long FirstChar() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FirstChar", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long FirstChar() const;
 /** (Required except for the standard 14 fonts) The last character code defined in
  *  the font's Widths array.
 **/
@@ -115,13 +85,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastChar", "", NULL));
   }
 
-  long LastChar() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastChar", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long LastChar() const;
 /** (Required except for the standard 14 fonts; indirect reference preferred) An array
  *  of (LastChar - FirstChar + 1) widths, each element being the glyph width for
  *  the character whose code is FirstChar plus the array index. For character
@@ -137,13 +101,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Widths", "", NULL));
   }
 
-  SkPdfArray* Widths() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Widths", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Widths() const;
 /** (Required except for the standard 14 fonts; must be an indirect reference) A font
  *  descriptor describing the font's metrics other than its glyph widths (see Sec-
  *  tion 5.7, "Font Descriptors").
@@ -156,13 +114,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontDescriptor", "", NULL));
   }
 
-  SkPdfDictionary* FontDescriptor() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontDescriptor", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* FontDescriptor() const;
 /** (Optional) A specification of the font's character encoding, if different from
  *  its built-in encoding. The value of Encoding may be either the name of a pre-
  *  defined encoding (MacRomanEncoding, MacExpertEncoding, or WinAnsi-
@@ -180,26 +132,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getEncodingAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getEncodingAsName() const;
   bool isEncodingADictionary() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getEncodingAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getEncodingAsDictionary() const;
 /** (Optional; PDF 1.2) A stream containing a CMap file that maps character
  *  codes to Unicode values (see Section 5.9, "ToUnicode CMaps").
 **/
@@ -207,13 +147,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ToUnicode", "", NULL));
   }
 
-  SkPdfStream* ToUnicode() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ToUnicode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* ToUnicode() const;
 };
 
 #endif  // __DEFINED__SkPdfType1FontDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType1FormDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType1FormDictionary_autogen.cpp
new file mode 100644
index 0000000..dd2736c
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType1FormDictionary_autogen.cpp
@@ -0,0 +1,107 @@
+#include "SkPdfType1FormDictionary_autogen.h"
+
+std::string SkPdfType1FormDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfType1FormDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfType1FormDictionary::FormType() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FormType", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfType1FormDictionary::Name() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDate SkPdfType1FormDictionary::LastModified() const {
+  SkPdfDate ret;
+  if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastModified", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfDate();
+}
+
+SkRect* SkPdfType1FormDictionary::BBox() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkMatrix* SkPdfType1FormDictionary::Matrix() const {
+  SkMatrix* ret;
+  if (SkMatrixFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matrix", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfResourceDictionary* SkPdfType1FormDictionary::Resources() const {
+  SkPdfResourceDictionary* ret;
+  if (ResourceDictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Resources", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfType1FormDictionary::Group() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Group", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfType1FormDictionary::Ref() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ref", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfType1FormDictionary::Metadata() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfType1FormDictionary::PieceInfo() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PieceInfo", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfType1FormDictionary::StructParent() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType1FormDictionary::StructParents() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfDictionary* SkPdfType1FormDictionary::OPI() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OPI", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType1FormDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType1FormDictionary_autogen.h
index e975649..083eb20 100644
--- a/experimental/PdfViewer/autogen/SkPdfType1FormDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType1FormDictionary_autogen.h
@@ -37,13 +37,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The type of XObject that this dictionary describes; must be Form
  *  for a form XObject.
 **/
@@ -51,13 +45,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Optional) A code identifying the type of form XObject that this dictionary
  *  describes. The only valid value defined at the time of publication is 1. Default
  *  value: 1.
@@ -66,13 +54,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FormType", "", NULL));
   }
 
-  long FormType() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FormType", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long FormType() const;
 /** (Required in PDF 1.0; optional otherwise) The name by which this form
  *  XObject is referenced in the XObject subdictionary of the current resource
  *  dictionary (see Section 3.7.2, "Resource Dictionaries").
@@ -83,13 +65,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", NULL));
   }
 
-  std::string Name() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Name() const;
 /** (Required if PieceInfo is present; optional otherwise; PDF 1.3) The date and
  *  time (see Section 3.8.2, "Dates") when the form XObject's contents were
  *  most recently modified. If a page-piece dictionary (PieceInfo) is present, the
@@ -101,13 +77,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastModified", "", NULL));
   }
 
-  SkPdfDate LastModified() const {
-    SkPdfDate ret;
-    if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastModified", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfDate();
-  }
-
+  SkPdfDate LastModified() const;
 /** (Required) An array of four numbers in the form coordinate system (see
  *  below), giving the coordinates of the left, bottom, right, and top edges,
  *  respectively, of the form XObject's bounding box. These boundaries are used
@@ -117,13 +87,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BBox", "", NULL));
   }
 
-  SkRect* BBox() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* BBox() const;
 /** (Optional) An array of six numbers specifying the form matrix, which maps
  *  form space into user space (see Section 4.2.3, "Transformation Matrices").
  *  Default value: the identity matrix [1 0 0 1 0 0].
@@ -132,13 +96,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matrix", "", NULL));
   }
 
-  SkMatrix* Matrix() const {
-    SkMatrix* ret;
-    if (SkMatrixFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matrix", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkMatrix* Matrix() const;
 /** (Optional but strongly recommended; PDF 1.2) A dictionary specifying any
  *  resources (such as fonts and images) required by the form XObject (see Sec-
  *  tion 3.7, "Content Streams and Resources").
@@ -161,13 +119,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Resources", "", NULL));
   }
 
-  SkPdfResourceDictionary* Resources() const {
-    SkPdfResourceDictionary* ret;
-    if (DictionaryFromDictionary2(fPodofoDoc, fPodofoObj->GetDictionary(), "Resources", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfResourceDictionary* Resources() const;
 /** (Optional; PDF 1.4) A group attributes dictionary indicating that the contents
  *  of the form XObject are to be treated as a group and specifying the attributes
  *  of that group (see Section 4.9.2, "Group XObjects").
@@ -179,13 +131,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Group", "", NULL));
   }
 
-  SkPdfDictionary* Group() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Group", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Group() const;
 /** (Optional; PDF 1.4) A reference dictionary identifying a page to be imported
  *  from another PDF file, and for which the form XObject serves as a proxy (see
  *  Section 4.9.3, "Reference XObjects").
@@ -194,13 +140,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ref", "", NULL));
   }
 
-  SkPdfDictionary* Ref() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Ref", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Ref() const;
 /** (Optional; PDF 1.4) A metadata stream containing metadata for the form
  *  XObject (see Section 9.2.2, "Metadata Streams").
 **/
@@ -208,13 +148,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", NULL));
   }
 
-  SkPdfStream* Metadata() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Metadata", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* Metadata() const;
 /** (Optional; PDF 1.3) A page-piece dictionary associated with the form
  *  XObject (see Section 9.4, "Page-Piece Dictionaries").
 **/
@@ -222,13 +156,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PieceInfo", "", NULL));
   }
 
-  SkPdfDictionary* PieceInfo() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PieceInfo", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* PieceInfo() const;
 /** (Required if the form XObject is a structural content item; PDF 1.3) The integer
  *  key of the form XObject's entry in the structural parent tree (see "Finding
  *  Structure Elements from Content Items" on page 600).
@@ -237,13 +165,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParent", "", NULL));
   }
 
-  long StructParent() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long StructParent() const;
 /** (Required if the form XObject contains marked-content sequences that are struc-
  *  tural content items; PDF 1.3) The integer key of the form XObject's entry in
  *  the structural parent tree (see "Finding Structure Elements from Content
@@ -256,13 +178,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParents", "", NULL));
   }
 
-  long StructParents() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "StructParents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long StructParents() const;
 /** (Optional; PDF 1.2) An OPI version dictionary for the form XObject (see
  *  Section 9.10.6, "Open Prepress Interface (OPI)").
 **/
@@ -270,13 +186,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OPI", "", NULL));
   }
 
-  SkPdfDictionary* OPI() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "OPI", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* OPI() const;
 };
 
 #endif  // __DEFINED__SkPdfType1FormDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType1HalftoneDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType1HalftoneDictionary_autogen.cpp
new file mode 100644
index 0000000..dc756bd
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType1HalftoneDictionary_autogen.cpp
@@ -0,0 +1,72 @@
+#include "SkPdfType1HalftoneDictionary_autogen.h"
+
+std::string SkPdfType1HalftoneDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfType1HalftoneDictionary::HalftoneType() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfType1HalftoneDictionary::HalftoneName() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+double SkPdfType1HalftoneDictionary::Frequency() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Frequency", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+double SkPdfType1HalftoneDictionary::Angle() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Angle", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfFunction SkPdfType1HalftoneDictionary::getSpotFunctionAsFunction() const {
+  SkPdfFunction ret = SkPdfFunction();
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpotFunction", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+std::string SkPdfType1HalftoneDictionary::getSpotFunctionAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpotFunction", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+bool SkPdfType1HalftoneDictionary::AccurateScreens() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AccurateScreens", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+SkPdfFunction SkPdfType1HalftoneDictionary::getTransferFunctionAsFunction() const {
+  SkPdfFunction ret = SkPdfFunction();
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+std::string SkPdfType1HalftoneDictionary::getTransferFunctionAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType1HalftoneDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType1HalftoneDictionary_autogen.h
index 0f229d9..b70d0cf 100644
--- a/experimental/PdfViewer/autogen/SkPdfType1HalftoneDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType1HalftoneDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) A code identifying the halftone type that this dictionary
  *  describes; must be 1 for this type of halftone.
 **/
@@ -546,26 +540,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", NULL));
   }
 
-  long HalftoneType() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long HalftoneType() const;
 /** (Optional) The name of the halftone dictionary.
 **/
   bool has_HalftoneName() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", NULL));
   }
 
-  std::string HalftoneName() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string HalftoneName() const;
 /** (Required) The screen frequency, measured in halftone cells per inch in
  *  device space.
 **/
@@ -573,13 +555,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Frequency", "", NULL));
   }
 
-  double Frequency() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Frequency", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double Frequency() const;
 /** (Required) The screen angle, in degrees of rotation counterclockwise
  *  with respect to the device coordinate system. (Note that most output
  *  devices have left-handed device spaces; on such devices, a counter-
@@ -590,13 +566,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Angle", "", NULL));
   }
 
-  double Angle() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Angle", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double Angle() const;
 /** (Required) A function object defining the order in which device pixels
  *  within a screen cell are adjusted for different gray levels, or the name of
  *  one of the predefined spot functions (see Table 6.1 on page 385).
@@ -611,26 +581,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfFunction getSpotFunctionAsFunction() const {
-    SkPdfFunction ret = SkPdfFunction();
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpotFunction", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction getSpotFunctionAsFunction() const;
   bool isSpotFunctionAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpotFunction", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getSpotFunctionAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SpotFunction", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getSpotFunctionAsName() const;
 /** (Optional) A flag specifying whether to invoke a special halftone al-
  *  gorithm that is extremely precise, but computationally expensive; see
  *  below for further discussion. Default value: false.
@@ -639,13 +597,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AccurateScreens", "", NULL));
   }
 
-  bool AccurateScreens() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "AccurateScreens", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool AccurateScreens() const;
 /** (Optional) A transfer function, which overrides the current transfer
  *  function in the graphics state for the same component. This entry is
  *  required if the dictionary is a component of a type 5 halftone (see
@@ -664,26 +616,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfFunction getTransferFunctionAsFunction() const {
-    SkPdfFunction ret = SkPdfFunction();
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction getTransferFunctionAsFunction() const;
   bool isTransferFunctionAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getTransferFunctionAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getTransferFunctionAsName() const;
 };
 
 #endif  // __DEFINED__SkPdfType1HalftoneDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType1PatternDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType1PatternDictionary_autogen.cpp
new file mode 100644
index 0000000..f2ac93a
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType1PatternDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfType1PatternDictionary_autogen.h"
+
+std::string SkPdfType1PatternDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfType1PatternDictionary::PatternType() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PatternType", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType1PatternDictionary::PaintType() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PaintType", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType1PatternDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType1PatternDictionary_autogen.h
index d191df0..4589339 100644
--- a/experimental/PdfViewer/autogen/SkPdfType1PatternDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType1PatternDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) A code identifying the type of pattern that this dictionary de-
  *  scribes; must be 1 for a tiling pattern.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PatternType", "", NULL));
   }
 
-  long PatternType() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PatternType", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long PatternType() const;
 /** (Required) A code that determines how the color of the pattern cell is to be
  *  specified:
  *     1     Colored tiling pattern. The pattern's content stream itself specifies the
@@ -569,13 +557,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PaintType", "", NULL));
   }
 
-  long PaintType() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PaintType", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long PaintType() const;
 };
 
 #endif  // __DEFINED__SkPdfType1PatternDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType1ShadingDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType1ShadingDictionary_autogen.cpp
new file mode 100644
index 0000000..be4929d
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType1ShadingDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfType1ShadingDictionary_autogen.h"
+
+SkPdfArray* SkPdfType1ShadingDictionary::Domain() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Domain", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfType1ShadingDictionary::Matrix() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matrix", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfFunction SkPdfType1ShadingDictionary::Function() const {
+  SkPdfFunction ret;
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType1ShadingDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType1ShadingDictionary_autogen.h
index 6d2b740..80f82cf 100644
--- a/experimental/PdfViewer/autogen/SkPdfType1ShadingDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType1ShadingDictionary_autogen.h
@@ -50,13 +50,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Domain", "", NULL));
   }
 
-  SkPdfArray* Domain() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Domain", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Domain() const;
 /** (Optional) An array of six numbers specifying a transformation matrix mapping
  *  the coordinate space specified by the Domain entry into the shading's target co-
  *  ordinate space. For example, to map the domain rectangle [0.0 1.0 0.0 1.0] to a
@@ -68,13 +62,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matrix", "", NULL));
   }
 
-  SkPdfArray* Matrix() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matrix", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Matrix() const;
 /** (Required) A 2-in, n-out function or an array of n 2-in, 1-out functions (where n
  *  is the number of color components in the shading dictionary's color space).
  *  Each function's domain must be a superset of that of the shading dictionary. If
@@ -85,13 +73,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", NULL));
   }
 
-  SkPdfFunction Function() const {
-    SkPdfFunction ret;
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction Function() const;
 };
 
 #endif  // __DEFINED__SkPdfType1ShadingDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType2FunctionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType2FunctionDictionary_autogen.cpp
new file mode 100644
index 0000000..c57e0f8
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType2FunctionDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfType2FunctionDictionary_autogen.h"
+
+SkPdfArray* SkPdfType2FunctionDictionary::C0() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C0", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfType2FunctionDictionary::C1() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C1", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+double SkPdfType2FunctionDictionary::N() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType2FunctionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType2FunctionDictionary_autogen.h
index accbfd1..549db11 100644
--- a/experimental/PdfViewer/autogen/SkPdfType2FunctionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType2FunctionDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C0", "", NULL));
   }
 
-  SkPdfArray* C0() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C0", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* C0() const;
 /** (Optional) An array of n numbers defining the function result when x = 1.0 (hence the "1"
  *  in the name). Default value: [1.0].
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C1", "", NULL));
   }
 
-  SkPdfArray* C1() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C1", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* C1() const;
 /** (Required) The interpolation exponent. Each input value x will return n values, given by
  *  yj = C0j + xN x (C1j - C0j ), for 0 <= j < n.
 **/
@@ -560,13 +548,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", NULL));
   }
 
-  double N() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "N", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double N() const;
 };
 
 #endif  // __DEFINED__SkPdfType2FunctionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType2PatternDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType2PatternDictionary_autogen.cpp
new file mode 100644
index 0000000..7f0976f
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType2PatternDictionary_autogen.cpp
@@ -0,0 +1,44 @@
+#include "SkPdfType2PatternDictionary_autogen.h"
+
+long SkPdfType2PatternDictionary::Type() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType2PatternDictionary::PatternType() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PatternType", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfDictionary* SkPdfType2PatternDictionary::getShadingAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Shading", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfType2PatternDictionary::getShadingAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Shading", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfType2PatternDictionary::Matrix() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matrix", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfType2PatternDictionary::ExtGState() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ExtGState", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType2PatternDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType2PatternDictionary_autogen.h
index d88fa8a..d97b721 100644
--- a/experimental/PdfViewer/autogen/SkPdfType2PatternDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType2PatternDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  long Type() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Type() const;
 /** (Required) A code identifying the type of pattern that this dictionary de-
  *  scribes; must be 2 for a shading pattern.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PatternType", "", NULL));
   }
 
-  long PatternType() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PatternType", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long PatternType() const;
 /** (Required) A shading object (see below) defining the shading pattern's gradient
  *  fill. The contents of the dictionary consist of the entries in Table 4.25 on page
  *  234, plus those in one of Tables 4.26 to 4.31 on pages 237 to 253.
@@ -567,26 +555,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getShadingAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Shading", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getShadingAsDictionary() const;
   bool isShadingAStream() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Shading", "", &ret)) return false;
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getShadingAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Shading", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getShadingAsStream() const;
 /** (Optional) An array of six numbers specifying the pattern matrix (see Section
  *  4.6.1, "General Properties of Patterns"). Default value: the identity matrix
  *  [1 0 0 1 0 0].
@@ -595,13 +571,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matrix", "", NULL));
   }
 
-  SkPdfArray* Matrix() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Matrix", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Matrix() const;
 /** (Optional) A graphics state parameter dictionary (see Section 4.3.4, "Graph-
  *  ics State Parameter Dictionaries") containing graphics state parameters to be
  *  put into effect temporarily while the shading pattern is painted. Any parame-
@@ -613,13 +583,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ExtGState", "", NULL));
   }
 
-  SkPdfDictionary* ExtGState() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ExtGState", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* ExtGState() const;
 };
 
 #endif  // __DEFINED__SkPdfType2PatternDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType2ShadingDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType2ShadingDictionary_autogen.cpp
new file mode 100644
index 0000000..b0069d0
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType2ShadingDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfType2ShadingDictionary_autogen.h"
+
+SkPdfArray* SkPdfType2ShadingDictionary::Coords() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Coords", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfType2ShadingDictionary::Domain() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Domain", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfFunction SkPdfType2ShadingDictionary::Function() const {
+  SkPdfFunction ret;
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+SkPdfArray* SkPdfType2ShadingDictionary::Extend() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Extend", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType2ShadingDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType2ShadingDictionary_autogen.h
index 8b5667f..3b91dee 100644
--- a/experimental/PdfViewer/autogen/SkPdfType2ShadingDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType2ShadingDictionary_autogen.h
@@ -50,13 +50,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Coords", "", NULL));
   }
 
-  SkPdfArray* Coords() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Coords", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Coords() const;
 /** (Optional) An array of two numbers [ t0 t1 ] specifying the limiting values of a
  *  parametric variable t. The variable is considered to vary linearly between these
  *  two values as the color gradient varies between the starting and ending points of
@@ -67,13 +61,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Domain", "", NULL));
   }
 
-  SkPdfArray* Domain() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Domain", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Domain() const;
 /** (Required) A 1-in, n-out function or an array of n 1-in, 1-out functions (where n
  *  is the number of color components in the shading dictionary's color space). The
  *  function(s) are called with values of the parametric variable t in the domain de-
@@ -85,13 +73,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", NULL));
   }
 
-  SkPdfFunction Function() const {
-    SkPdfFunction ret;
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction Function() const;
 /** (Optional) An array of two boolean values specifying whether to extend the
  *  shading beyond the starting and ending points of the axis, respectively. Default
  *  value: [false false].
@@ -100,13 +82,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Extend", "", NULL));
   }
 
-  SkPdfArray* Extend() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Extend", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Extend() const;
 };
 
 #endif  // __DEFINED__SkPdfType2ShadingDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType3FontDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType3FontDictionary_autogen.cpp
new file mode 100644
index 0000000..7b413e3
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType3FontDictionary_autogen.cpp
@@ -0,0 +1,93 @@
+#include "SkPdfType3FontDictionary_autogen.h"
+
+std::string SkPdfType3FontDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfType3FontDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfType3FontDictionary::Name() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkRect* SkPdfType3FontDictionary::FontBBox() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontBBox", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkMatrix* SkPdfType3FontDictionary::FontMatrix() const {
+  SkMatrix* ret;
+  if (SkMatrixFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontMatrix", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfType3FontDictionary::CharProcs() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CharProcs", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfType3FontDictionary::getEncodingAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfEncodingDictionary* SkPdfType3FontDictionary::getEncodingAsEncodingdictionary() const {
+  SkPdfEncodingDictionary* ret = NULL;
+  if (EncodingDictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+long SkPdfType3FontDictionary::FirstChar() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FirstChar", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType3FontDictionary::LastChar() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastChar", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfType3FontDictionary::Widths() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Widths", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfType3FontDictionary::Resources() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Resources", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfType3FontDictionary::ToUnicode() const {
+  SkPdfStream* ret;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ToUnicode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType3FontDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType3FontDictionary_autogen.h
index 079930e..0bd04be 100644
--- a/experimental/PdfViewer/autogen/SkPdfType3FontDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType3FontDictionary_autogen.h
@@ -40,39 +40,21 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The type of font; must be Type3 for a Type 3 font.
 **/
   bool has_Subtype() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Required in PDF 1.0; optional otherwise) See Table 5.8 on page 317.
 **/
   bool has_Name() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", NULL));
   }
 
-  std::string Name() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Name", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Name() const;
 /** (Required) A rectangle (see Section 3.8.3, "Rectangles"), expressed in the
  *  glyph coordinate system, specifying the font bounding box. This is the small-
  *  est rectangle enclosing the shape that would result if all of the glyphs of the
@@ -86,13 +68,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontBBox", "", NULL));
   }
 
-  SkRect* FontBBox() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontBBox", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* FontBBox() const;
 /** (Required) An array of six numbers specifying the font matrix, mapping
  *  glyph space to text space (see Section 5.1.3, "Glyph Positioning and
  *  Metrics"). A common practice is to define glyphs in terms of a 1000-unit
@@ -103,13 +79,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontMatrix", "", NULL));
   }
 
-  SkMatrix* FontMatrix() const {
-    SkMatrix* ret;
-    if (SkMatrixFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FontMatrix", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkMatrix* FontMatrix() const;
 /** (Required) A dictionary in which each key is a character name and the value
  *  associated with that key is a content stream that constructs and paints the
  *  glyph for that character. The stream must include as its first operator either
@@ -121,13 +91,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CharProcs", "", NULL));
   }
 
-  SkPdfDictionary* CharProcs() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CharProcs", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* CharProcs() const;
 /** (Required) An encoding dictionary whose Differences array specifies the
  *  complete character encoding for this font (see Section 5.5.5, "Character
  *  Encoding"; also see implementation note 46 in Appendix H).
@@ -142,52 +106,28 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getEncodingAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getEncodingAsName() const;
   bool isEncodingAEncodingdictionary() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfEncodingDictionary* getEncodingAsEncodingdictionary() const {
-    SkPdfEncodingDictionary* ret = NULL;
-    if (DictionaryFromDictionary2(fPodofoDoc, fPodofoObj->GetDictionary(), "Encoding", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfEncodingDictionary* getEncodingAsEncodingdictionary() const;
 /** (Required) The first character code defined in the font's Widths array.
 **/
   bool has_FirstChar() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FirstChar", "", NULL));
   }
 
-  long FirstChar() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FirstChar", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long FirstChar() const;
 /** (Required) The last character code defined in the font's Widths array.
 **/
   bool has_LastChar() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastChar", "", NULL));
   }
 
-  long LastChar() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "LastChar", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long LastChar() const;
 /** (Required; indirect reference preferred) An array of (LastChar - FirstChar + 1)
  *  widths, each element being the glyph width for the character whose code is
  *  FirstChar plus the array index. For character codes outside the range FirstChar
@@ -202,13 +142,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Widths", "", NULL));
   }
 
-  SkPdfArray* Widths() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Widths", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Widths() const;
 /** (Optional but strongly recommended; PDF 1.2) A list of the named resources,
  *  such as fonts and images, required by the glyph descriptions in this font (see
  *  Section 3.7.2, "Resource Dictionaries"). If any glyph descriptions refer to
@@ -220,13 +154,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Resources", "", NULL));
   }
 
-  SkPdfDictionary* Resources() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Resources", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* Resources() const;
 /** (Optional; PDF 1.2) A stream containing a CMap file that maps character
  *  codes to Unicode values (see Section 5.9, "ToUnicode CMaps").
 **/
@@ -234,13 +162,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ToUnicode", "", NULL));
   }
 
-  SkPdfStream* ToUnicode() const {
-    SkPdfStream* ret;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ToUnicode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* ToUnicode() const;
 };
 
 #endif  // __DEFINED__SkPdfType3FontDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType3FunctionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType3FunctionDictionary_autogen.cpp
new file mode 100644
index 0000000..6449c31
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType3FunctionDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfType3FunctionDictionary_autogen.h"
+
+SkPdfArray* SkPdfType3FunctionDictionary::Functions() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Functions", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfType3FunctionDictionary::Bounds() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Bounds", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfType3FunctionDictionary::Encode() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType3FunctionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType3FunctionDictionary_autogen.h
index b09b9fa..38451fb 100644
--- a/experimental/PdfViewer/autogen/SkPdfType3FunctionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType3FunctionDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Functions", "", NULL));
   }
 
-  SkPdfArray* Functions() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Functions", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Functions() const;
 /** (Required) An array of k - 1 numbers that, in combination with Domain, define the
  *  intervals to which each function from the Functions array applies. Bounds elements
  *  must be in order of increasing value, and each value must be within the domain
@@ -549,13 +543,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Bounds", "", NULL));
   }
 
-  SkPdfArray* Bounds() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Bounds", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Bounds() const;
 /** (Required) An array of 2 x k numbers that, taken in pairs, map each subset of the do-
  *  main defined by Domain and the Bounds array to the domain of the corresponding
  *  function.
@@ -564,13 +552,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encode", "", NULL));
   }
 
-  SkPdfArray* Encode() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Encode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Encode() const;
 };
 
 #endif  // __DEFINED__SkPdfType3FunctionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType3ShadingDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType3ShadingDictionary_autogen.cpp
new file mode 100644
index 0000000..042cc8f
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType3ShadingDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfType3ShadingDictionary_autogen.h"
+
+SkPdfArray* SkPdfType3ShadingDictionary::Coords() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Coords", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfType3ShadingDictionary::Domain() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Domain", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfFunction SkPdfType3ShadingDictionary::Function() const {
+  SkPdfFunction ret;
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+SkPdfArray* SkPdfType3ShadingDictionary::Extend() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Extend", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType3ShadingDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType3ShadingDictionary_autogen.h
index cff6013..68f4891 100644
--- a/experimental/PdfViewer/autogen/SkPdfType3ShadingDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType3ShadingDictionary_autogen.h
@@ -52,13 +52,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Coords", "", NULL));
   }
 
-  SkPdfArray* Coords() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Coords", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Coords() const;
 /** (Optional) An array of two numbers [ t0 t1 ] specifying the limiting values of a
  *  parametric variable t. The variable is considered to vary linearly between these
  *  two values as the color gradient varies between the starting and ending circles.
@@ -69,13 +63,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Domain", "", NULL));
   }
 
-  SkPdfArray* Domain() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Domain", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Domain() const;
 /** (Required) A 1-in, n-out function or an array of n 1-in, 1-out functions (where n
  *  is the number of color components in the shading dictionary's color space). The
  *  function(s) are called with values of the parametric variable t in the domain de-
@@ -88,13 +76,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", NULL));
   }
 
-  SkPdfFunction Function() const {
-    SkPdfFunction ret;
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction Function() const;
 /** (Optional) An array of two boolean values specifying whether to extend the
  *  shading beyond the starting and ending circles, respectively. Default value:
  *  [false false].
@@ -103,13 +85,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Extend", "", NULL));
   }
 
-  SkPdfArray* Extend() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Extend", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Extend() const;
 };
 
 #endif  // __DEFINED__SkPdfType3ShadingDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType4ShadingDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType4ShadingDictionary_autogen.cpp
new file mode 100644
index 0000000..671856e
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType4ShadingDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfType4ShadingDictionary_autogen.h"
+
+long SkPdfType4ShadingDictionary::BitsPerCoordinate() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerCoordinate", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType4ShadingDictionary::BitsPerComponent() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType4ShadingDictionary::BitsPerFlag() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerFlag", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkRect* SkPdfType4ShadingDictionary::Decode() const {
+  SkRect* ret;
+  if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfFunction SkPdfType4ShadingDictionary::Function() const {
+  SkPdfFunction ret;
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType4ShadingDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType4ShadingDictionary_autogen.h
index eeb531d..9deff01 100644
--- a/experimental/PdfViewer/autogen/SkPdfType4ShadingDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType4ShadingDictionary_autogen.h
@@ -49,13 +49,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerCoordinate", "", NULL));
   }
 
-  long BitsPerCoordinate() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerCoordinate", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long BitsPerCoordinate() const;
 /** (Required) The number of bits used to represent each color component.
  *  Valid values are 1, 2, 4, 8, 12, and 16.
 **/
@@ -63,13 +57,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", NULL));
   }
 
-  long BitsPerComponent() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long BitsPerComponent() const;
 /** (Required) The number of bits used to represent the edge flag for each ver-
  *  tex (see below). Valid values of BitsPerFlag are 2, 4, and 8, but only the
  *  least significant 2 bits in each flag value are used. Valid values for the edge
@@ -79,13 +67,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerFlag", "", NULL));
   }
 
-  long BitsPerFlag() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerFlag", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long BitsPerFlag() const;
 /** (Required) An array of numbers specifying how to map vertex coordinates
  *  and color components into the appropriate ranges of values. The de-
  *  coding method is similar to that used in image dictionaries (see "Decode
@@ -98,13 +80,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", NULL));
   }
 
-  SkRect* Decode() const {
-    SkRect* ret;
-    if (SkRectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkRect* Decode() const;
 /** (Optional) A 1-in, n-out function or an array of n 1-in, 1-out functions
  *  (where n is the number of color components in the shading dictionary's
  *  color space). If this entry is present, the color data for each vertex must be
@@ -122,13 +98,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", NULL));
   }
 
-  SkPdfFunction Function() const {
-    SkPdfFunction ret;
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction Function() const;
 };
 
 #endif  // __DEFINED__SkPdfType4ShadingDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType5HalftoneDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType5HalftoneDictionary_autogen.cpp
new file mode 100644
index 0000000..0d999dc
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType5HalftoneDictionary_autogen.cpp
@@ -0,0 +1,53 @@
+#include "SkPdfType5HalftoneDictionary_autogen.h"
+
+std::string SkPdfType5HalftoneDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+double SkPdfType5HalftoneDictionary::HalftoneType() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfType5HalftoneDictionary::HalftoneName() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+/*
+SkPdfDictionary* SkPdfType5HalftoneDictionary::get[any_colorant_name]AsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "[any_colorant_name]", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfType5HalftoneDictionary::get[any_colorant_name]AsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "[any_colorant_name]", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+*/
+SkPdfDictionary* SkPdfType5HalftoneDictionary::getDefaultAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Default", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfStream* SkPdfType5HalftoneDictionary::getDefaultAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Default", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType5HalftoneDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType5HalftoneDictionary_autogen.h
index d3b3e77..0179af3 100644
--- a/experimental/PdfViewer/autogen/SkPdfType5HalftoneDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType5HalftoneDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) A code identifying the halftone type that this dictionary describes;
  *  must be 5 for this type of halftone.
 **/
@@ -546,26 +540,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", NULL));
   }
 
-  double HalftoneType() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double HalftoneType() const;
 /** (Optional) The name of the halftone dictionary.
 **/
   bool has_HalftoneName() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", NULL));
   }
 
-  std::string HalftoneName() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string HalftoneName() const;
 /** (Required, one per colorant) The halftone corresponding to the colorant or
  *  color component named by the key. The halftone may be of any type other
  *  than 5. Note that the key must be a name object; strings are not permitted, as
@@ -582,26 +564,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* get[any_colorant_name]AsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "[any_colorant_name]", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* get[any_colorant_name]AsDictionary() const;
   bool is[any_colorant_name]AStream() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "[any_colorant_name]", "", &ret)) return false;
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* get[any_colorant_name]AsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "[any_colorant_name]", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* get[any_colorant_name]AsStream() const;
 */
 /** (Required) A halftone to be used for any colorant or color component that
  *  does not have an entry of its own. The value may not be a type 5 halftone. If
@@ -618,26 +588,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getDefaultAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Default", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getDefaultAsDictionary() const;
   bool isDefaultAStream() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Default", "", &ret)) return false;
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getDefaultAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Default", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getDefaultAsStream() const;
 };
 
 #endif  // __DEFINED__SkPdfType5HalftoneDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType5ShadingDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType5ShadingDictionary_autogen.cpp
new file mode 100644
index 0000000..4ec82d1
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType5ShadingDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfType5ShadingDictionary_autogen.h"
+
+long SkPdfType5ShadingDictionary::BitsPerCoordinate() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerCoordinate", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType5ShadingDictionary::BitsPerComponent() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType5ShadingDictionary::VerticesPerRow() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "VerticesPerRow", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfType5ShadingDictionary::Decode() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfFunction SkPdfType5ShadingDictionary::Function() const {
+  SkPdfFunction ret;
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType5ShadingDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType5ShadingDictionary_autogen.h
index bfed8fb..399e713 100644
--- a/experimental/PdfViewer/autogen/SkPdfType5ShadingDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType5ShadingDictionary_autogen.h
@@ -49,13 +49,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerCoordinate", "", NULL));
   }
 
-  long BitsPerCoordinate() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerCoordinate", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long BitsPerCoordinate() const;
 /** (Required) The number of bits used to represent each color component.
  *  Valid values are 1, 2, 4, 8, 12, and 16.
 **/
@@ -63,13 +57,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", NULL));
   }
 
-  long BitsPerComponent() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long BitsPerComponent() const;
 /** (Required) The number of vertices in each row of the lattice; the value
  *  must be greater than or equal to 2. The number of rows need not be
  *  specified.
@@ -78,13 +66,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "VerticesPerRow", "", NULL));
   }
 
-  long VerticesPerRow() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "VerticesPerRow", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long VerticesPerRow() const;
 /** (Required) An array of numbers specifying how to map vertex coordinates
  *  and color components into the appropriate ranges of values. The de-
  *  coding method is similar to that used in image dictionaries (see "Decode
@@ -97,13 +79,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", NULL));
   }
 
-  SkPdfArray* Decode() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Decode() const;
 /** (Optional) A 1-in, n-out function or an array of n 1-in, 1-out functions
  *  (where n is the number of color components in the shading dictionary's
  *  color space). If this entry is present, the color data for each vertex must be
@@ -121,13 +97,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", NULL));
   }
 
-  SkPdfFunction Function() const {
-    SkPdfFunction ret;
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction Function() const;
 };
 
 #endif  // __DEFINED__SkPdfType5ShadingDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType6HalftoneDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType6HalftoneDictionary_autogen.cpp
new file mode 100644
index 0000000..8f9ecd4
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType6HalftoneDictionary_autogen.cpp
@@ -0,0 +1,51 @@
+#include "SkPdfType6HalftoneDictionary_autogen.h"
+
+std::string SkPdfType6HalftoneDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfType6HalftoneDictionary::HalftoneType() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfType6HalftoneDictionary::HalftoneName() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfType6HalftoneDictionary::Width() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType6HalftoneDictionary::Height() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfFunction SkPdfType6HalftoneDictionary::getTransferFunctionAsFunction() const {
+  SkPdfFunction ret = SkPdfFunction();
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
+std::string SkPdfType6HalftoneDictionary::getTransferFunctionAsName() const {
+  std::string ret = "";
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType6HalftoneDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType6HalftoneDictionary_autogen.h
index 74dac95..9c68248 100644
--- a/experimental/PdfViewer/autogen/SkPdfType6HalftoneDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType6HalftoneDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) A code identifying the halftone type that this dictionary
  *  describes; must be 6 for this type of halftone.
 **/
@@ -546,52 +540,28 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", NULL));
   }
 
-  long HalftoneType() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneType", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long HalftoneType() const;
 /** (Optional) The name of the halftone dictionary.
 **/
   bool has_HalftoneName() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", NULL));
   }
 
-  std::string HalftoneName() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HalftoneName", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string HalftoneName() const;
 /** (Required) The width of the threshold array, in device pixels.
 **/
   bool has_Width() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", NULL));
   }
 
-  long Width() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Width", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Width() const;
 /** (Required) The height of the threshold array, in device pixels.
 **/
   bool has_Height() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", NULL));
   }
 
-  long Height() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Height", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Height() const;
 /** (Optional) A transfer function, which overrides the current transfer
  *  function in the graphics state for the same component. This entry is
  *  required if the dictionary is a component of a type 5 halftone (see
@@ -610,26 +580,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Reference;
   }
 
-  SkPdfFunction getTransferFunctionAsFunction() const {
-    SkPdfFunction ret = SkPdfFunction();
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction getTransferFunctionAsFunction() const;
   bool isTransferFunctionAName() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Name;
   }
 
-  std::string getTransferFunctionAsName() const {
-    std::string ret = "";
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TransferFunction", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getTransferFunctionAsName() const;
 };
 
 #endif  // __DEFINED__SkPdfType6HalftoneDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfType6ShadingDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfType6ShadingDictionary_autogen.cpp
new file mode 100644
index 0000000..c7fa09e
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfType6ShadingDictionary_autogen.cpp
@@ -0,0 +1,37 @@
+#include "SkPdfType6ShadingDictionary_autogen.h"
+
+long SkPdfType6ShadingDictionary::BitsPerCoordinate() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerCoordinate", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType6ShadingDictionary::BitsPerComponent() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfType6ShadingDictionary::BitsPerFlag() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerFlag", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfType6ShadingDictionary::Decode() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfFunction SkPdfType6ShadingDictionary::Function() const {
+  SkPdfFunction ret;
+  if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfFunction();
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfType6ShadingDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfType6ShadingDictionary_autogen.h
index dfb9fd4..59755ac 100644
--- a/experimental/PdfViewer/autogen/SkPdfType6ShadingDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfType6ShadingDictionary_autogen.h
@@ -49,13 +49,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerCoordinate", "", NULL));
   }
 
-  long BitsPerCoordinate() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerCoordinate", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long BitsPerCoordinate() const;
 /** (Required) The number of bits used to represent each color component.
  *  Valid values are 1, 2, 4, 8, 12, and 16.
 **/
@@ -63,13 +57,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", NULL));
   }
 
-  long BitsPerComponent() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerComponent", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long BitsPerComponent() const;
 /** (Required) The number of bits used to represent the edge flag for each
  *  patch (see below). Valid values of BitsPerFlag are 2, 4, and 8, but only the
  *  least significant 2 bits in each flag value are used. Valid values for the edge
@@ -79,13 +67,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerFlag", "", NULL));
   }
 
-  long BitsPerFlag() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "BitsPerFlag", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long BitsPerFlag() const;
 /** (Required) An array of numbers specifying how to map coordinates and
  *  color components into the appropriate ranges of values. The decoding
  *  method is similar to that used in image dictionaries (see "Decode Arrays"
@@ -98,13 +80,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", NULL));
   }
 
-  SkPdfArray* Decode() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Decode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* Decode() const;
 /** (Optional) A 1-in, n-out function or an array of n 1-in, 1-out functions
  *  (where n is the number of color components in the shading dictionary's
  *  color space). If this entry is present, the color data for each vertex must be
@@ -122,13 +98,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", NULL));
   }
 
-  SkPdfFunction Function() const {
-    SkPdfFunction ret;
-    if (FunctionFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Function", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfFunction();
-  }
-
+  SkPdfFunction Function() const;
 };
 
 #endif  // __DEFINED__SkPdfType6ShadingDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfURIActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfURIActionDictionary_autogen.cpp
new file mode 100644
index 0000000..e2bf8cf
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfURIActionDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfURIActionDictionary_autogen.h"
+
+std::string SkPdfURIActionDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfURIActionDictionary::URI() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URI", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+bool SkPdfURIActionDictionary::IsMap() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IsMap", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfURIActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfURIActionDictionary_autogen.h
index 8b21a61..212969e 100644
--- a/experimental/PdfViewer/autogen/SkPdfURIActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfURIActionDictionary_autogen.h
@@ -532,26 +532,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required) The uniform resource identifier to resolve, encoded in 7-bit ASCII.
 **/
   bool has_URI() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URI", "", NULL));
   }
 
-  std::string URI() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URI", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string URI() const;
 /** (Optional) A flag specifying whether to track the mouse position when the URI is re-
  *  solved (see below). Default value: false.
  *  This entry applies only to actions triggered by the user's clicking an annotation; it is
@@ -562,13 +550,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IsMap", "", NULL));
   }
 
-  bool IsMap() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "IsMap", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool IsMap() const;
 };
 
 #endif  // __DEFINED__SkPdfURIActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfURIDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfURIDictionary_autogen.cpp
new file mode 100644
index 0000000..1c10e0b
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfURIDictionary_autogen.cpp
@@ -0,0 +1,9 @@
+#include "SkPdfURIDictionary_autogen.h"
+
+std::string SkPdfURIDictionary::Base() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Base", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfURIDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfURIDictionary_autogen.h
index a35b94e..be21237 100644
--- a/experimental/PdfViewer/autogen/SkPdfURIDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfURIDictionary_autogen.h
@@ -536,13 +536,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Base", "", NULL));
   }
 
-  std::string Base() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Base", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Base() const;
 };
 
 #endif  // __DEFINED__SkPdfURIDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfURLAliasDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfURLAliasDictionary_autogen.cpp
new file mode 100644
index 0000000..7368499
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfURLAliasDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfURLAliasDictionary_autogen.h"
+
+std::string SkPdfURLAliasDictionary::U() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "U", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfURLAliasDictionary::C() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfURLAliasDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfURLAliasDictionary_autogen.h
index 1360788..93ad7f6 100644
--- a/experimental/PdfViewer/autogen/SkPdfURLAliasDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfURLAliasDictionary_autogen.h
@@ -531,13 +531,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "U", "", NULL));
   }
 
-  std::string U() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "U", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string U() const;
 /** (Optional) An array of one or more arrays of strings, each representing a chain of URLs
  *  leading to the common destination specified by U.
 **/
@@ -545,13 +539,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", NULL));
   }
 
-  SkPdfArray* C() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* C() const;
 };
 
 #endif  // __DEFINED__SkPdfURLAliasDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfVariableTextFieldDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfVariableTextFieldDictionary_autogen.cpp
new file mode 100644
index 0000000..e927f3c
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfVariableTextFieldDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfVariableTextFieldDictionary_autogen.h"
+
+SkPdfDictionary* SkPdfVariableTextFieldDictionary::DR() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DR", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfVariableTextFieldDictionary::DA() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DA", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfVariableTextFieldDictionary::Q() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Q", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfVariableTextFieldDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfVariableTextFieldDictionary_autogen.h
index 5543ca8..29e54a4 100644
--- a/experimental/PdfViewer/autogen/SkPdfVariableTextFieldDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfVariableTextFieldDictionary_autogen.h
@@ -535,13 +535,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DR", "", NULL));
   }
 
-  SkPdfDictionary* DR() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DR", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* DR() const;
 /** (Required; inheritable) The default appearance string, containing a sequence of valid
  *  page-content graphics or text state operators defining such properties as the field's text
  *  size and color.
@@ -550,13 +544,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DA", "", NULL));
   }
 
-  std::string DA() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DA", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string DA() const;
 /** (Optional; inheritable) A code specifying the form of quadding (justification) to be
  *  used in displaying the text:
  *      0    Left-justified
@@ -568,13 +556,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Q", "", NULL));
   }
 
-  long Q() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Q", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long Q() const;
 };
 
 #endif  // __DEFINED__SkPdfVariableTextFieldDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfViewerPreferencesDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfViewerPreferencesDictionary_autogen.cpp
new file mode 100644
index 0000000..dac44df
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfViewerPreferencesDictionary_autogen.cpp
@@ -0,0 +1,86 @@
+#include "SkPdfViewerPreferencesDictionary_autogen.h"
+
+bool SkPdfViewerPreferencesDictionary::HideToolbar() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HideToolbar", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+bool SkPdfViewerPreferencesDictionary::HideMenubar() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HideMenubar", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+bool SkPdfViewerPreferencesDictionary::HideWindowUI() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HideWindowUI", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+bool SkPdfViewerPreferencesDictionary::FitWindow() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FitWindow", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+bool SkPdfViewerPreferencesDictionary::CenterWindow() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CenterWindow", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+bool SkPdfViewerPreferencesDictionary::DisplayDocTitle() const {
+  bool ret;
+  if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DisplayDocTitle", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return false;
+}
+
+std::string SkPdfViewerPreferencesDictionary::NonFullScreenPageMode() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "NonFullScreenPageMode", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfViewerPreferencesDictionary::Direction() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Direction", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfViewerPreferencesDictionary::ViewArea() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ViewArea", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfViewerPreferencesDictionary::ViewClip() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ViewClip", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfViewerPreferencesDictionary::PrintArea() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PrintArea", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfViewerPreferencesDictionary::PrintClip() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PrintClip", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfViewerPreferencesDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfViewerPreferencesDictionary_autogen.h
index b604916..0f6a327 100644
--- a/experimental/PdfViewer/autogen/SkPdfViewerPreferencesDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfViewerPreferencesDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HideToolbar", "", NULL));
   }
 
-  bool HideToolbar() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HideToolbar", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool HideToolbar() const;
 /** (Optional) A flag specifying whether to hide the viewer application's
  *  menu bar when the document is active. Default value: false.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HideMenubar", "", NULL));
   }
 
-  bool HideMenubar() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HideMenubar", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool HideMenubar() const;
 /** (Optional) A flag specifying whether to hide user interface elements in
  *  the document's window (such as scroll bars and navigation controls),
  *  leaving only the document's contents displayed. Default value: false.
@@ -561,13 +549,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HideWindowUI", "", NULL));
   }
 
-  bool HideWindowUI() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "HideWindowUI", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool HideWindowUI() const;
 /** (Optional) A flag specifying whether to resize the document's window to
  *  fit the size of the first displayed page. Default value: false.
 **/
@@ -575,13 +557,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FitWindow", "", NULL));
   }
 
-  bool FitWindow() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "FitWindow", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool FitWindow() const;
 /** (Optional) A flag specifying whether to position the document's window
  *  in the center of the screen. Default value: false.
 **/
@@ -589,13 +565,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CenterWindow", "", NULL));
   }
 
-  bool CenterWindow() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CenterWindow", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool CenterWindow() const;
 /** (Optional; PDF 1.4) A flag specifying whether the window's title bar
  *  should display the document title taken from the Title entry of the docu-
  *  ment information dictionary (see Section 9.2.1, "Document Informa-
@@ -606,13 +576,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DisplayDocTitle", "", NULL));
   }
 
-  bool DisplayDocTitle() const {
-    bool ret;
-    if (BoolFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "DisplayDocTitle", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return false;
-  }
-
+  bool DisplayDocTitle() const;
 /** (Optional) The document's page mode, specifying how to display the
  *  document on exiting full-screen mode:
  *       UseNone            Neither document outline nor thumbnail images
@@ -627,13 +591,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "NonFullScreenPageMode", "", NULL));
   }
 
-  std::string NonFullScreenPageMode() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "NonFullScreenPageMode", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string NonFullScreenPageMode() const;
 /** (Optional; PDF 1.3) The predominant reading order for text:
  *       L2R                Left to right
  *       R2L                Right to left (including vertical writing systems
@@ -646,13 +604,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Direction", "", NULL));
   }
 
-  std::string Direction() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Direction", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Direction() const;
 /** (Optional; PDF 1.4) The name of the page boundary representing the
  *  area of a page to be displayed when viewing the document on the screen.
  *  The value is the key designating the relevant page boundary in the page
@@ -668,13 +620,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ViewArea", "", NULL));
   }
 
-  std::string ViewArea() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ViewArea", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string ViewArea() const;
 /** (Optional; PDF 1.4) The name of the page boundary to which the con-
  *  tents of a page are to be clipped when viewing the document on the
  *  screen. The value is the key designating the relevant page boundary in
@@ -690,13 +636,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ViewClip", "", NULL));
   }
 
-  std::string ViewClip() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ViewClip", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string ViewClip() const;
 /** (Optional; PDF 1.4) The name of the page boundary representing the
  *  area of a page to be rendered when printing the document. The value is
  *  the key designating the relevant page boundary in the page object (see
@@ -711,13 +651,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PrintArea", "", NULL));
   }
 
-  std::string PrintArea() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PrintArea", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string PrintArea() const;
 /** (Optional; PDF 1.4) The name of the page boundary to which the con-
  *  tents of a page are to be clipped when printing the document. The value
  *  is the key designating the relevant page boundary in the page object (see
@@ -732,13 +666,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PrintClip", "", NULL));
   }
 
-  std::string PrintClip() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "PrintClip", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string PrintClip() const;
 };
 
 #endif  // __DEFINED__SkPdfViewerPreferencesDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandDictionary_autogen.cpp
new file mode 100644
index 0000000..f09a7b1
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandDictionary_autogen.cpp
@@ -0,0 +1,58 @@
+#include "SkPdfWebCaptureCommandDictionary_autogen.h"
+
+std::string SkPdfWebCaptureCommandDictionary::URL() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URL", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfWebCaptureCommandDictionary::L() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "L", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+long SkPdfWebCaptureCommandDictionary::F() const {
+  long ret;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+std::string SkPdfWebCaptureCommandDictionary::getPAsString() const {
+  std::string ret = "";
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfStream* SkPdfWebCaptureCommandDictionary::getPAsStream() const {
+  SkPdfStream* ret = NULL;
+  if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfWebCaptureCommandDictionary::CT() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CT", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfWebCaptureCommandDictionary::H() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "H", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfWebCaptureCommandDictionary::S() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandDictionary_autogen.h
index 4627361..acb84c0 100644
--- a/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandDictionary_autogen.h
@@ -531,13 +531,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URL", "", NULL));
   }
 
-  std::string URL() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "URL", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string URL() const;
 /** (Optional) The number of levels of pages retrieved from the initial URL. Default
  *  value: 1.
 **/
@@ -545,13 +539,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "L", "", NULL));
   }
 
-  long L() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "L", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long L() const;
 /** (Optional) A set of flags specifying various characteristics of the command (see
  *  Table 9.39). Default value: 0.
 **/
@@ -559,13 +547,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  long F() const {
-    long ret;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long F() const;
 /** (Optional) Data that was posted to the URL.
 **/
   bool has_P() const {
@@ -578,26 +560,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString;
   }
 
-  std::string getPAsString() const {
-    std::string ret = "";
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string getPAsString() const;
   bool isPAStream() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return false;
     return ret->podofo()->HasStream();
   }
 
-  SkPdfStream* getPAsStream() const {
-    SkPdfStream* ret = NULL;
-    if (StreamFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfStream* getPAsStream() const;
 /** (Optional) A content type describing the data posted to the URL. Default value:
  *  application/x-www-form-urlencoded.
 **/
@@ -605,26 +575,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CT", "", NULL));
   }
 
-  std::string CT() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CT", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string CT() const;
 /** (Optional) Additional HTTP request headers sent to the URL.
 **/
   bool has_H() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "H", "", NULL));
   }
 
-  std::string H() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "H", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string H() const;
 /** (Optional) A command settings dictionary containing settings used in the con-
  *  version process (see "Command Settings" on page 674).
 **/
@@ -632,13 +590,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  SkPdfDictionary* S() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* S() const;
 };
 
 #endif  // __DEFINED__SkPdfWebCaptureCommandDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandSettingsDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandSettingsDictionary_autogen.cpp
new file mode 100644
index 0000000..f0790e6
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandSettingsDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfWebCaptureCommandSettingsDictionary_autogen.h"
+
+SkPdfDictionary* SkPdfWebCaptureCommandSettingsDictionary::G() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "G", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfWebCaptureCommandSettingsDictionary::C() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandSettingsDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandSettingsDictionary_autogen.h
index d471d14..ecbff5c 100644
--- a/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandSettingsDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfWebCaptureCommandSettingsDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "G", "", NULL));
   }
 
-  SkPdfDictionary* G() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "G", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* G() const;
 /** (Optional) Settings for specific conversion engines. Each key in this dictionary is the
  *  internal name of a conversion engine (see below). The associated value is a dictionary
  *  containing the settings associated with that conversion engine. If the settings for a par-
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", NULL));
   }
 
-  SkPdfDictionary* C() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* C() const;
 };
 
 #endif  // __DEFINED__SkPdfWebCaptureCommandSettingsDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfWebCaptureDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfWebCaptureDictionary_autogen.cpp
new file mode 100644
index 0000000..0892588
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfWebCaptureDictionary_autogen.cpp
@@ -0,0 +1,58 @@
+#include "SkPdfWebCaptureDictionary_autogen.h"
+
+std::string SkPdfWebCaptureDictionary::Type() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfWebCaptureDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfWebCaptureDictionary::ID() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfArray* SkPdfWebCaptureDictionary::O() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfDictionary* SkPdfWebCaptureDictionary::getSIAsDictionary() const {
+  SkPdfDictionary* ret = NULL;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SI", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+SkPdfArray* SkPdfWebCaptureDictionary::getSIAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SI", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
+std::string SkPdfWebCaptureDictionary::CT() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CT", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDate SkPdfWebCaptureDictionary::TS() const {
+  SkPdfDate ret;
+  if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TS", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return SkPdfDate();
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfWebCaptureDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfWebCaptureDictionary_autogen.h
index 2460a7a..c87963e 100644
--- a/experimental/PdfViewer/autogen/SkPdfWebCaptureDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfWebCaptureDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", NULL));
   }
 
-  std::string Type() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Type", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Type() const;
 /** (Required) The subtype of content set that this dictionary describes:
  *     SPS     ("Spider page set") A page set
  *     SIS     ("Spider image set") An image set
@@ -547,13 +541,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required) The digital identifier of the content set (see "Digital Identifiers" on page
  *  664). If the content set has been located via the URLS name tree, this allows its related
  *  entry in the IDS name tree to be found.
@@ -562,13 +550,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", NULL));
   }
 
-  std::string ID() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "ID", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string ID() const;
 /** (Required) An array of indirect references to the objects belonging to the content set.
  *  The order of objects in the array is undefined in general, but may be restricted by spe-
  *  cific content set subtypes.
@@ -577,13 +559,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", NULL));
   }
 
-  SkPdfArray* O() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* O() const;
 /** (Required) A source information dictionary (see Section 9.9.4, "Source Information"),
  *  or an array of such dictionaries, describing the sources from which the objects belong-
  *  ing to the content set were created.
@@ -598,26 +574,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Dictionary;
   }
 
-  SkPdfDictionary* getSIAsDictionary() const {
-    SkPdfDictionary* ret = NULL;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SI", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* getSIAsDictionary() const;
   bool isSIAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SI", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getSIAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "SI", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getSIAsArray() const;
 /** (Optional) The content type, a string characterizing the source from which the objects
  *  belonging to the content set were created. The string should conform to the content
  *  type specification described in Internet RFC 2045, Multipurpose Internet Mail Exten-
@@ -629,26 +593,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CT", "", NULL));
   }
 
-  std::string CT() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "CT", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string CT() const;
 /** (Optional) A time stamp giving the date and time at which the content set was created.
 **/
   bool has_TS() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TS", "", NULL));
   }
 
-  SkPdfDate TS() const {
-    SkPdfDate ret;
-    if (DateFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TS", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return SkPdfDate();
-  }
-
+  SkPdfDate TS() const;
 };
 
 #endif  // __DEFINED__SkPdfWebCaptureDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfWebCaptureImageSetDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfWebCaptureImageSetDictionary_autogen.cpp
new file mode 100644
index 0000000..db2c429
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfWebCaptureImageSetDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfWebCaptureImageSetDictionary_autogen.h"
+
+std::string SkPdfWebCaptureImageSetDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+long SkPdfWebCaptureImageSetDictionary::getRAsInteger() const {
+  long ret = 0;
+  if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfWebCaptureImageSetDictionary::getRAsArray() const {
+  SkPdfArray* ret = NULL;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfWebCaptureImageSetDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfWebCaptureImageSetDictionary_autogen.h
index 287def7..ee23a8e 100644
--- a/experimental/PdfViewer/autogen/SkPdfWebCaptureImageSetDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfWebCaptureImageSetDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Required) The reference counts (see below) for the image XObjects belonging to the
  *  image set. For an image set containing a single XObject, the value is simply the integer
  *  reference count for that XObject. If the image set contains multiple XObjects, the value is
@@ -556,26 +550,14 @@
     return ret->podofo()->GetDataType() == ePdfDataType_Number;
   }
 
-  long getRAsInteger() const {
-    long ret = 0;
-    if (LongFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  long getRAsInteger() const;
   bool isRAArray() const {
     SkPdfObject* ret = NULL;
     if (!ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return false;
     return ret->podofo()->GetDataType() == ePdfDataType_Array;
   }
 
-  SkPdfArray* getRAsArray() const {
-    SkPdfArray* ret = NULL;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "R", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* getRAsArray() const;
 };
 
 #endif  // __DEFINED__SkPdfWebCaptureImageSetDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfWebCaptureInformationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfWebCaptureInformationDictionary_autogen.cpp
new file mode 100644
index 0000000..dec583d
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfWebCaptureInformationDictionary_autogen.cpp
@@ -0,0 +1,16 @@
+#include "SkPdfWebCaptureInformationDictionary_autogen.h"
+
+double SkPdfWebCaptureInformationDictionary::V() const {
+  double ret;
+  if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return 0;
+}
+
+SkPdfArray* SkPdfWebCaptureInformationDictionary::C() const {
+  SkPdfArray* ret;
+  if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfWebCaptureInformationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfWebCaptureInformationDictionary_autogen.h
index d8593a0..c94f93f 100644
--- a/experimental/PdfViewer/autogen/SkPdfWebCaptureInformationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfWebCaptureInformationDictionary_autogen.h
@@ -533,13 +533,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", NULL));
   }
 
-  double V() const {
-    double ret;
-    if (DoubleFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "V", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return 0;
-  }
-
+  double V() const;
 /** (Optional) An array of indirect references to Web Capture command dictionaries (see
  *  "Command Dictionaries" on page 672) describing commands that were used in building
  *  the PDF file. The commands appear in the array in the order in which they were executed
@@ -549,13 +543,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", NULL));
   }
 
-  SkPdfArray* C() const {
-    SkPdfArray* ret;
-    if (ArrayFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "C", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfArray* C() const;
 };
 
 #endif  // __DEFINED__SkPdfWebCaptureInformationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfWebCapturePageSetDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfWebCapturePageSetDictionary_autogen.cpp
new file mode 100644
index 0000000..ba6b144
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfWebCapturePageSetDictionary_autogen.cpp
@@ -0,0 +1,23 @@
+#include "SkPdfWebCapturePageSetDictionary_autogen.h"
+
+std::string SkPdfWebCapturePageSetDictionary::S() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfWebCapturePageSetDictionary::T() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfWebCapturePageSetDictionary::TID() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TID", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfWebCapturePageSetDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfWebCapturePageSetDictionary_autogen.h
index 41c46d6..f5fc327 100644
--- a/experimental/PdfViewer/autogen/SkPdfWebCapturePageSetDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfWebCapturePageSetDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", NULL));
   }
 
-  std::string S() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "S", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string S() const;
 /** (Optional) The title of the page set, a text string representing it in human-readable
  *  form.
 **/
@@ -546,13 +540,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", NULL));
   }
 
-  std::string T() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "T", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string T() const;
 /** (Optional) A text identifier generated from the text of the page set, as described in
  *  "Digital Identifiers" on page 664.
 **/
@@ -560,13 +548,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TID", "", NULL));
   }
 
-  std::string TID() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "TID", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string TID() const;
 };
 
 #endif  // __DEFINED__SkPdfWebCapturePageSetDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfWidgetAnnotationDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfWidgetAnnotationDictionary_autogen.cpp
new file mode 100644
index 0000000..db8bbed
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfWidgetAnnotationDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfWidgetAnnotationDictionary_autogen.h"
+
+std::string SkPdfWidgetAnnotationDictionary::Subtype() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfWidgetAnnotationDictionary::Contents() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfWidgetAnnotationDictionary::H() const {
+  std::string ret;
+  if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "H", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+SkPdfDictionary* SkPdfWidgetAnnotationDictionary::MK() const {
+  SkPdfDictionary* ret;
+  if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MK", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return NULL;
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfWidgetAnnotationDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfWidgetAnnotationDictionary_autogen.h
index ebe48fc..0a4d360 100644
--- a/experimental/PdfViewer/autogen/SkPdfWidgetAnnotationDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfWidgetAnnotationDictionary_autogen.h
@@ -532,13 +532,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", NULL));
   }
 
-  std::string Subtype() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Subtype", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Subtype() const;
 /** (Optional; PDF 1.4) An alternate representation of the annotation's contents in
  *  human-readable form, useful when extracting the document's contents in sup-
  *  port of accessibility to disabled users or for other purposes (see Section 9.8.2,
@@ -548,13 +542,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", NULL));
   }
 
-  std::string Contents() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "Contents", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string Contents() const;
 /** (Optional) The annotation's highlighting mode, the visual effect to be used when
  *  the mouse button is pressed or held down inside its active area:
  *     N    (None) No highlighting.
@@ -572,13 +560,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "H", "", NULL));
   }
 
-  std::string H() const {
-    std::string ret;
-    if (NameFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "H", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string H() const;
 /** (Optional) An appearance characteristics dictionary to be used in constructing a
  *  dynamic appearance stream specifying the annotation's visual presentation on
  *  the page; see "Variable Text" on page 533 for further discussion.
@@ -589,13 +571,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MK", "", NULL));
   }
 
-  SkPdfDictionary* MK() const {
-    SkPdfDictionary* ret;
-    if (DictionaryFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "MK", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return NULL;
-  }
-
+  SkPdfDictionary* MK() const;
 };
 
 #endif  // __DEFINED__SkPdfWidgetAnnotationDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfWindowsLaunchActionDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfWindowsLaunchActionDictionary_autogen.cpp
new file mode 100644
index 0000000..838e2be
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfWindowsLaunchActionDictionary_autogen.cpp
@@ -0,0 +1,30 @@
+#include "SkPdfWindowsLaunchActionDictionary_autogen.h"
+
+std::string SkPdfWindowsLaunchActionDictionary::F() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfWindowsLaunchActionDictionary::D() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfWindowsLaunchActionDictionary::O() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
+std::string SkPdfWindowsLaunchActionDictionary::P() const {
+  std::string ret;
+  if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
+  // TODO(edisonn): warn about missing required field, assert for known good pdfs
+  return "";
+}
+
diff --git a/experimental/PdfViewer/autogen/SkPdfWindowsLaunchActionDictionary_autogen.h b/experimental/PdfViewer/autogen/SkPdfWindowsLaunchActionDictionary_autogen.h
index c1bce3e..b3fe9e1 100644
--- a/experimental/PdfViewer/autogen/SkPdfWindowsLaunchActionDictionary_autogen.h
+++ b/experimental/PdfViewer/autogen/SkPdfWindowsLaunchActionDictionary_autogen.h
@@ -535,26 +535,14 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", NULL));
   }
 
-  std::string F() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "F", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string F() const;
 /** (Optional) A string specifying the default directory in standard DOS syntax.
 **/
   bool has_D() const {
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", NULL));
   }
 
-  std::string D() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "D", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string D() const;
 /** (Optional) A string specifying the operation to perform:
  *      open      Open a document.
  *      print     Print a document.
@@ -565,13 +553,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", NULL));
   }
 
-  std::string O() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "O", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string O() const;
 /** (Optional) A parameter string to be passed to the application designated by
  *  the F entry. This entry should be omitted if F designates a document.
 **/
@@ -579,13 +561,7 @@
     return (ObjectFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", NULL));
   }
 
-  std::string P() const {
-    std::string ret;
-    if (StringFromDictionary(fPodofoDoc, fPodofoObj->GetDictionary(), "P", "", &ret)) return ret;
-    // TODO(edisonn): warn about missing required field, assert for known good pdfs
-    return "";
-  }
-
+  std::string P() const;
 };
 
 #endif  // __DEFINED__SkPdfWindowsLaunchActionDictionary
diff --git a/experimental/PdfViewer/autogen/SkPdfXObjectDictionary_autogen.cpp b/experimental/PdfViewer/autogen/SkPdfXObjectDictionary_autogen.cpp
new file mode 100644
index 0000000..ef58c4f
--- /dev/null
+++ b/experimental/PdfViewer/autogen/SkPdfXObjectDictionary_autogen.cpp
@@ -0,0 +1,2 @@
+#include "SkPdfXObjectDictionary_autogen.h"
+
diff --git a/experimental/PdfViewer/autogen/pdfspec_autogen.py b/experimental/PdfViewer/autogen/pdfspec_autogen.py
index 9e1dbd9..f43c848 100644
--- a/experimental/PdfViewer/autogen/pdfspec_autogen.py
+++ b/experimental/PdfViewer/autogen/pdfspec_autogen.py
@@ -5412,168 +5412,168 @@
 
 
 def addDictionaryTypesTo(knowTypes):
-  knowTypes['GoToActionDictionary'] = ['SkPdfGoToActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['SoundObjectDictionary'] = ['SkPdfSoundObjectDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['LaunchActionDictionary'] = ['SkPdfLaunchActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['RemoteGoToActionDictionary'] = ['SkPdfRemoteGoToActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['PageObjectActionsDictionary'] = ['SkPdfPageObjectActionsDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['AnnotationActionsDictionary'] = ['SkPdfAnnotationActionsDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['DocumentCatalogActionsDictionary'] = ['SkPdfDocumentCatalogActionsDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FormFieldActionsDictionary'] = ['SkPdfFormFieldActionsDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['JavascriptDictionary'] = ['SkPdfJavascriptDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['EncryptedEmbeddedFileStreamDictionary'] = ['SkPdfEncryptedEmbeddedFileStreamDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['IconFitDictionary'] = ['SkPdfIconFitDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FDFFieldDictionary'] = ['SkPdfFDFFieldDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ThreadActionDictionary'] = ['SkPdfThreadActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['WindowsLaunchActionDictionary'] = ['SkPdfWindowsLaunchActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FileAttachmentAnnotationDictionary'] = ['SkPdfFileAttachmentAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FDFNamedPageReferenceDictionary'] = ['SkPdfFDFNamedPageReferenceDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FileTrailerDictionary'] = ['SkPdfFileTrailerDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['EncryptionCommonDictionary'] = ['SkPdfEncryptionCommonDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Jbig2DecodeFilterDictionary'] = ['SkPdfJbig2DecodeFilterDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['DctdecodeFilterDictionary'] = ['SkPdfDctdecodeFilterDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['CatalogDictionary'] = ['SkPdfCatalogDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['PageTreeNodeDictionary'] = ['SkPdfPageTreeNodeDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['StandardSecurityHandlerDictionary'] = ['SkPdfStandardSecurityHandlerDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['PageObjectDictionary'] = ['SkPdfPageObjectDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['NameDictionary'] = ['SkPdfNameDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['VariableTextFieldDictionary'] = ['SkPdfVariableTextFieldDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ObjectReferenceDictionary'] = ['SkPdfObjectReferenceDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['TrapNetworkAppearanceStreamDictionary'] = ['SkPdfTrapNetworkAppearanceStreamDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ImageDictionary'] = ['SkPdfImageDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['OpiVersionDictionary'] = ['SkPdfOpiVersionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type1FontDictionary'] = ['SkPdfType1FontDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type3FontDictionary'] = ['SkPdfType3FontDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['EncodingDictionary'] = ['SkPdfEncodingDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['CIDSystemInfoDictionary'] = ['SkPdfCIDSystemInfoDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['CIDFontDictionary'] = ['SkPdfCIDFontDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['CMapDictionary'] = ['SkPdfCMapDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type0FontDictionary'] = ['SkPdfType0FontDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FontDescriptorDictionary'] = ['SkPdfFontDescriptorDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ResetFormActionDictionary'] = ['SkPdfResetFormActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FDFPageDictionary'] = ['SkPdfFDFPageDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ChoiceFieldDictionary'] = ['SkPdfChoiceFieldDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['StructureElementAccessDictionary'] = ['SkPdfStructureElementAccessDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['CalgrayColorSpaceDictionary'] = ['SkPdfCalgrayColorSpaceDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['WebCaptureCommandDictionary'] = ['SkPdfWebCaptureCommandDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['IccProfileStreamDictionary'] = ['SkPdfIccProfileStreamDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['LabColorSpaceDictionary'] = ['SkPdfLabColorSpaceDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['CalrgbColorSpaceDictionary'] = ['SkPdfCalrgbColorSpaceDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['HideActionDictionary'] = ['SkPdfHideActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FDFTemplateDictionary'] = ['SkPdfFDFTemplateDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['NamedActionsDictionary'] = ['SkPdfNamedActionsDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['InteractiveFormDictionary'] = ['SkPdfInteractiveFormDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['URIActionDictionary'] = ['SkPdfURIActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['URIDictionary'] = ['SkPdfURIDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['SoundActionDictionary'] = ['SkPdfSoundActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['MovieActionDictionary'] = ['SkPdfMovieActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['SourceInformationDictionary'] = ['SkPdfSourceInformationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FDFFileAnnotationDictionary'] = ['SkPdfFDFFileAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['TransitionDictionary'] = ['SkPdfTransitionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['BeadDictionary'] = ['SkPdfBeadDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ThreadDictionary'] = ['SkPdfThreadDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['PageLabelDictionary'] = ['SkPdfPageLabelDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['OutlineItemDictionary'] = ['SkPdfOutlineItemDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['OutlineDictionary'] = ['SkPdfOutlineDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ViewerPreferencesDictionary'] = ['SkPdfViewerPreferencesDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['MarkInformationDictionary'] = ['SkPdfMarkInformationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['URLAliasDictionary'] = ['SkPdfURLAliasDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['WebCaptureDictionary'] = ['SkPdfWebCaptureDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['AttributeObjectDictionary'] = ['SkPdfAttributeObjectDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ArtifactsDictionary'] = ['SkPdfArtifactsDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['WebCaptureInformationDictionary'] = ['SkPdfWebCaptureInformationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['TrapNetworkAnnotationDictionary'] = ['SkPdfTrapNetworkAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type1FormDictionary'] = ['SkPdfType1FormDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['GroupAttributesDictionary'] = ['SkPdfGroupAttributesDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ReferenceDictionary'] = ['SkPdfReferenceDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['PSXobjectDictionary'] = ['SkPdfPSXobjectDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['BoxStyleDictionary'] = ['SkPdfBoxStyleDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['BoxColorInformationDictionary'] = ['SkPdfBoxColorInformationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['WebCaptureCommandSettingsDictionary'] = ['SkPdfWebCaptureCommandSettingsDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['InlineLevelStructureElementsDictionary'] = ['SkPdfInlineLevelStructureElementsDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['AppearanceCharacteristicsDictionary'] = ['SkPdfAppearanceCharacteristicsDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type3ShadingDictionary'] = ['SkPdfType3ShadingDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type4ShadingDictionary'] = ['SkPdfType4ShadingDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['TextFieldDictionary'] = ['SkPdfTextFieldDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['RadioButtonFieldDictionary'] = ['SkPdfRadioButtonFieldDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['CheckboxFieldDictionary'] = ['SkPdfCheckboxFieldDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type1PatternDictionary'] = ['SkPdfType1PatternDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type2PatternDictionary'] = ['SkPdfType2PatternDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['DeviceNColorSpaceDictionary'] = ['SkPdfDeviceNColorSpaceDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type1ShadingDictionary'] = ['SkPdfType1ShadingDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type2ShadingDictionary'] = ['SkPdfType2ShadingDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['StandardStructureDictionary'] = ['SkPdfStandardStructureDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ShadingDictionary'] = ['SkPdfShadingDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['EmbeddedFileParameterDictionary'] = ['SkPdfEmbeddedFileParameterDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['MacOsFileInformationDictionary'] = ['SkPdfMacOsFileInformationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['WebCaptureImageSetDictionary'] = ['SkPdfWebCaptureImageSetDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['GraphicsStateDictionary'] = ['SkPdfGraphicsStateDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FileSpecificationDictionary'] = ['SkPdfFileSpecificationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['EmbeddedFileStreamDictionary'] = ['SkPdfEmbeddedFileStreamDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['MovieDictionary'] = ['SkPdfMovieDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FieldDictionary'] = ['SkPdfFieldDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['MovieActivationDictionary'] = ['SkPdfMovieActivationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['TableAttributesDictionary'] = ['SkPdfTableAttributesDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ListAttributeDictionary'] = ['SkPdfListAttributeDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['SeparationDictionary'] = ['SkPdfSeparationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['BlockLevelStructureElementsDictionary'] = ['SkPdfBlockLevelStructureElementsDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FDFCatalogDictionary'] = ['SkPdfFDFCatalogDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type1HalftoneDictionary'] = ['SkPdfType1HalftoneDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type10HalftoneDictionary'] = ['SkPdfType10HalftoneDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type6HalftoneDictionary'] = ['SkPdfType6HalftoneDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type5HalftoneDictionary'] = ['SkPdfType5HalftoneDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type16HalftoneDictionary'] = ['SkPdfType16HalftoneDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type6ShadingDictionary'] = ['SkPdfType6ShadingDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['StreamCommonDictionary'] = ['SkPdfStreamCommonDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FDFDictionary'] = ['SkPdfFDFDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['LzwdecodeAndFlatedecodeFiltersDictionary'] = ['SkPdfLzwdecodeAndFlatedecodeFiltersDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['CcittfaxdecodeFilterDictionary'] = ['SkPdfCcittfaxdecodeFilterDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['MarkedContentReferenceDictionary'] = ['SkPdfMarkedContentReferenceDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['SignatureDictionary'] = ['SkPdfSignatureDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['SoundAnnotationDictionary'] = ['SkPdfSoundAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['MovieAnnotationDictionary'] = ['SkPdfMovieAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type3FunctionDictionary'] = ['SkPdfType3FunctionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type2FunctionDictionary'] = ['SkPdfType2FunctionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['RubberStampAnnotationDictionary'] = ['SkPdfRubberStampAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['InkAnnotationDictionary'] = ['SkPdfInkAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['SquareOrCircleAnnotation'] = ['SkPdfSquareOrCircleAnnotation*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['MarkupAnnotationsDictionary'] = ['SkPdfMarkupAnnotationsDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['NameTreeNodeDictionary'] = ['SkPdfNameTreeNodeDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type5ShadingDictionary'] = ['SkPdfType5ShadingDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ResourceDictionary'] = ['SkPdfResourceDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['SubmitFormActionDictionary'] = ['SkPdfSubmitFormActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['Type0FunctionDictionary'] = ['SkPdfType0FunctionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FunctionCommonDictionary'] = ['SkPdfFunctionCommonDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['NumberTreeNodeDictionary'] = ['SkPdfNumberTreeNodeDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ActionDictionary'] = ['SkPdfActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['WidgetAnnotationDictionary'] = ['SkPdfWidgetAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['StructureTreeRootDictionary'] = ['SkPdfStructureTreeRootDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['JavascriptActionDictionary'] = ['SkPdfJavascriptActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['AlternateImageDictionary'] = ['SkPdfAlternateImageDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['PDF_XOutputIntentDictionary'] = ['SkPdfPDF_XOutputIntentDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['DocumentInformationDictionary'] = ['SkPdfDocumentInformationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['MetadataStreamDictionary'] = ['SkPdfMetadataStreamDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ImportDataActionDictionary'] = ['SkPdfImportDataActionDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['PagePieceDictionary'] = ['SkPdfPagePieceDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ApplicationDataDictionary'] = ['SkPdfApplicationDataDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ComponentsWithMetadataDictionary'] = ['SkPdfComponentsWithMetadataDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['PrinterMarkFormDictionary'] = ['SkPdfPrinterMarkFormDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['StructureElementDictionary'] = ['SkPdfStructureElementDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['PrinterMarkAnnotationDictionary'] = ['SkPdfPrinterMarkAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['SoftMaskImageDictionary'] = ['SkPdfSoftMaskImageDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['TransparencyGroupDictionary'] = ['SkPdfTransparencyGroupDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['SoftMaskDictionary'] = ['SkPdfSoftMaskDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['BorderStyleDictionary'] = ['SkPdfBorderStyleDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['PopUpAnnotationDictionary'] = ['SkPdfPopUpAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FDFTrailerDictionary'] = ['SkPdfFDFTrailerDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['LineAnnotationDictionary'] = ['SkPdfLineAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['FreeTextAnnotationDictionary'] = ['SkPdfFreeTextAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['ALinkAnnotationDictionary'] = ['SkPdfALinkAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['TextAnnotationDictionary'] = ['SkPdfTextAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['WebCapturePageSetDictionary'] = ['SkPdfWebCapturePageSetDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['AppearanceDictionary'] = ['SkPdfAppearanceDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['CIDFontDescriptorDictionary'] = ['SkPdfCIDFontDescriptorDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['EmbeddedFontStreamDictionary'] = ['SkPdfEmbeddedFontStreamDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
-  knowTypes['AnnotationDictionary'] = ['SkPdfAnnotationDictionary*', 'DictionaryFromDictionary2', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['GoToActionDictionary'] = ['SkPdfGoToActionDictionary*', 'GoToActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['SoundObjectDictionary'] = ['SkPdfSoundObjectDictionary*', 'SoundObjectDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['LaunchActionDictionary'] = ['SkPdfLaunchActionDictionary*', 'LaunchActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['RemoteGoToActionDictionary'] = ['SkPdfRemoteGoToActionDictionary*', 'RemoteGoToActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['PageObjectActionsDictionary'] = ['SkPdfPageObjectActionsDictionary*', 'PageObjectActionsDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['AnnotationActionsDictionary'] = ['SkPdfAnnotationActionsDictionary*', 'AnnotationActionsDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['DocumentCatalogActionsDictionary'] = ['SkPdfDocumentCatalogActionsDictionary*', 'DocumentCatalogActionsDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FormFieldActionsDictionary'] = ['SkPdfFormFieldActionsDictionary*', 'FormFieldActionsDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['JavascriptDictionary'] = ['SkPdfJavascriptDictionary*', 'JavascriptDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['EncryptedEmbeddedFileStreamDictionary'] = ['SkPdfEncryptedEmbeddedFileStreamDictionary*', 'EncryptedEmbeddedFileStreamDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['IconFitDictionary'] = ['SkPdfIconFitDictionary*', 'IconFitDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FDFFieldDictionary'] = ['SkPdfFDFFieldDictionary*', 'FDFFieldDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ThreadActionDictionary'] = ['SkPdfThreadActionDictionary*', 'ThreadActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['WindowsLaunchActionDictionary'] = ['SkPdfWindowsLaunchActionDictionary*', 'WindowsLaunchActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FileAttachmentAnnotationDictionary'] = ['SkPdfFileAttachmentAnnotationDictionary*', 'FileAttachmentAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FDFNamedPageReferenceDictionary'] = ['SkPdfFDFNamedPageReferenceDictionary*', 'FDFNamedPageReferenceDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FileTrailerDictionary'] = ['SkPdfFileTrailerDictionary*', 'FileTrailerDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['EncryptionCommonDictionary'] = ['SkPdfEncryptionCommonDictionary*', 'EncryptionCommonDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Jbig2DecodeFilterDictionary'] = ['SkPdfJbig2DecodeFilterDictionary*', 'Jbig2DecodeFilterDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['DctdecodeFilterDictionary'] = ['SkPdfDctdecodeFilterDictionary*', 'DctdecodeFilterDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['CatalogDictionary'] = ['SkPdfCatalogDictionary*', 'CatalogDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['PageTreeNodeDictionary'] = ['SkPdfPageTreeNodeDictionary*', 'PageTreeNodeDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['StandardSecurityHandlerDictionary'] = ['SkPdfStandardSecurityHandlerDictionary*', 'StandardSecurityHandlerDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['PageObjectDictionary'] = ['SkPdfPageObjectDictionary*', 'PageObjectDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['NameDictionary'] = ['SkPdfNameDictionary*', 'NameDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['VariableTextFieldDictionary'] = ['SkPdfVariableTextFieldDictionary*', 'VariableTextFieldDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ObjectReferenceDictionary'] = ['SkPdfObjectReferenceDictionary*', 'ObjectReferenceDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['TrapNetworkAppearanceStreamDictionary'] = ['SkPdfTrapNetworkAppearanceStreamDictionary*', 'TrapNetworkAppearanceStreamDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ImageDictionary'] = ['SkPdfImageDictionary*', 'ImageDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['OpiVersionDictionary'] = ['SkPdfOpiVersionDictionary*', 'OpiVersionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type1FontDictionary'] = ['SkPdfType1FontDictionary*', 'Type1FontDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type3FontDictionary'] = ['SkPdfType3FontDictionary*', 'Type3FontDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['EncodingDictionary'] = ['SkPdfEncodingDictionary*', 'EncodingDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['CIDSystemInfoDictionary'] = ['SkPdfCIDSystemInfoDictionary*', 'CIDSystemInfoDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['CIDFontDictionary'] = ['SkPdfCIDFontDictionary*', 'CIDFontDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['CMapDictionary'] = ['SkPdfCMapDictionary*', 'CMapDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type0FontDictionary'] = ['SkPdfType0FontDictionary*', 'Type0FontDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FontDescriptorDictionary'] = ['SkPdfFontDescriptorDictionary*', 'FontDescriptorDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ResetFormActionDictionary'] = ['SkPdfResetFormActionDictionary*', 'ResetFormActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FDFPageDictionary'] = ['SkPdfFDFPageDictionary*', 'FDFPageDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ChoiceFieldDictionary'] = ['SkPdfChoiceFieldDictionary*', 'ChoiceFieldDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['StructureElementAccessDictionary'] = ['SkPdfStructureElementAccessDictionary*', 'StructureElementAccessDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['CalgrayColorSpaceDictionary'] = ['SkPdfCalgrayColorSpaceDictionary*', 'CalgrayColorSpaceDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['WebCaptureCommandDictionary'] = ['SkPdfWebCaptureCommandDictionary*', 'WebCaptureCommandDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['IccProfileStreamDictionary'] = ['SkPdfIccProfileStreamDictionary*', 'IccProfileStreamDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['LabColorSpaceDictionary'] = ['SkPdfLabColorSpaceDictionary*', 'LabColorSpaceDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['CalrgbColorSpaceDictionary'] = ['SkPdfCalrgbColorSpaceDictionary*', 'CalrgbColorSpaceDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['HideActionDictionary'] = ['SkPdfHideActionDictionary*', 'HideActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FDFTemplateDictionary'] = ['SkPdfFDFTemplateDictionary*', 'FDFTemplateDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['NamedActionsDictionary'] = ['SkPdfNamedActionsDictionary*', 'NamedActionsDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['InteractiveFormDictionary'] = ['SkPdfInteractiveFormDictionary*', 'InteractiveFormDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['URIActionDictionary'] = ['SkPdfURIActionDictionary*', 'URIActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['URIDictionary'] = ['SkPdfURIDictionary*', 'URIDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['SoundActionDictionary'] = ['SkPdfSoundActionDictionary*', 'SoundActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['MovieActionDictionary'] = ['SkPdfMovieActionDictionary*', 'MovieActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['SourceInformationDictionary'] = ['SkPdfSourceInformationDictionary*', 'SourceInformationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FDFFileAnnotationDictionary'] = ['SkPdfFDFFileAnnotationDictionary*', 'FDFFileAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['TransitionDictionary'] = ['SkPdfTransitionDictionary*', 'TransitionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['BeadDictionary'] = ['SkPdfBeadDictionary*', 'BeadDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ThreadDictionary'] = ['SkPdfThreadDictionary*', 'ThreadDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['PageLabelDictionary'] = ['SkPdfPageLabelDictionary*', 'PageLabelDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['OutlineItemDictionary'] = ['SkPdfOutlineItemDictionary*', 'OutlineItemDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['OutlineDictionary'] = ['SkPdfOutlineDictionary*', 'OutlineDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ViewerPreferencesDictionary'] = ['SkPdfViewerPreferencesDictionary*', 'ViewerPreferencesDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['MarkInformationDictionary'] = ['SkPdfMarkInformationDictionary*', 'MarkInformationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['URLAliasDictionary'] = ['SkPdfURLAliasDictionary*', 'URLAliasDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['WebCaptureDictionary'] = ['SkPdfWebCaptureDictionary*', 'WebCaptureDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['AttributeObjectDictionary'] = ['SkPdfAttributeObjectDictionary*', 'AttributeObjectDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ArtifactsDictionary'] = ['SkPdfArtifactsDictionary*', 'ArtifactsDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['WebCaptureInformationDictionary'] = ['SkPdfWebCaptureInformationDictionary*', 'WebCaptureInformationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['TrapNetworkAnnotationDictionary'] = ['SkPdfTrapNetworkAnnotationDictionary*', 'TrapNetworkAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type1FormDictionary'] = ['SkPdfType1FormDictionary*', 'Type1FormDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['GroupAttributesDictionary'] = ['SkPdfGroupAttributesDictionary*', 'GroupAttributesDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ReferenceDictionary'] = ['SkPdfReferenceDictionary*', 'ReferenceDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['PSXobjectDictionary'] = ['SkPdfPSXobjectDictionary*', 'PSXobjectDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['BoxStyleDictionary'] = ['SkPdfBoxStyleDictionary*', 'BoxStyleDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['BoxColorInformationDictionary'] = ['SkPdfBoxColorInformationDictionary*', 'BoxColorInformationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['WebCaptureCommandSettingsDictionary'] = ['SkPdfWebCaptureCommandSettingsDictionary*', 'WebCaptureCommandSettingsDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['InlineLevelStructureElementsDictionary'] = ['SkPdfInlineLevelStructureElementsDictionary*', 'InlineLevelStructureElementsDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['AppearanceCharacteristicsDictionary'] = ['SkPdfAppearanceCharacteristicsDictionary*', 'AppearanceCharacteristicsDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type3ShadingDictionary'] = ['SkPdfType3ShadingDictionary*', 'Type3ShadingDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type4ShadingDictionary'] = ['SkPdfType4ShadingDictionary*', 'Type4ShadingDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['TextFieldDictionary'] = ['SkPdfTextFieldDictionary*', 'TextFieldDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['RadioButtonFieldDictionary'] = ['SkPdfRadioButtonFieldDictionary*', 'RadioButtonFieldDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['CheckboxFieldDictionary'] = ['SkPdfCheckboxFieldDictionary*', 'CheckboxFieldDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type1PatternDictionary'] = ['SkPdfType1PatternDictionary*', 'Type1PatternDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type2PatternDictionary'] = ['SkPdfType2PatternDictionary*', 'Type2PatternDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['DeviceNColorSpaceDictionary'] = ['SkPdfDeviceNColorSpaceDictionary*', 'DeviceNColorSpaceDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type1ShadingDictionary'] = ['SkPdfType1ShadingDictionary*', 'Type1ShadingDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type2ShadingDictionary'] = ['SkPdfType2ShadingDictionary*', 'Type2ShadingDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['StandardStructureDictionary'] = ['SkPdfStandardStructureDictionary*', 'StandardStructureDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ShadingDictionary'] = ['SkPdfShadingDictionary*', 'ShadingDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['EmbeddedFileParameterDictionary'] = ['SkPdfEmbeddedFileParameterDictionary*', 'EmbeddedFileParameterDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['MacOsFileInformationDictionary'] = ['SkPdfMacOsFileInformationDictionary*', 'MacOsFileInformationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['WebCaptureImageSetDictionary'] = ['SkPdfWebCaptureImageSetDictionary*', 'WebCaptureImageSetDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['GraphicsStateDictionary'] = ['SkPdfGraphicsStateDictionary*', 'GraphicsStateDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FileSpecificationDictionary'] = ['SkPdfFileSpecificationDictionary*', 'FileSpecificationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['EmbeddedFileStreamDictionary'] = ['SkPdfEmbeddedFileStreamDictionary*', 'EmbeddedFileStreamDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['MovieDictionary'] = ['SkPdfMovieDictionary*', 'MovieDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FieldDictionary'] = ['SkPdfFieldDictionary*', 'FieldDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['MovieActivationDictionary'] = ['SkPdfMovieActivationDictionary*', 'MovieActivationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['TableAttributesDictionary'] = ['SkPdfTableAttributesDictionary*', 'TableAttributesDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ListAttributeDictionary'] = ['SkPdfListAttributeDictionary*', 'ListAttributeDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['SeparationDictionary'] = ['SkPdfSeparationDictionary*', 'SeparationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['BlockLevelStructureElementsDictionary'] = ['SkPdfBlockLevelStructureElementsDictionary*', 'BlockLevelStructureElementsDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FDFCatalogDictionary'] = ['SkPdfFDFCatalogDictionary*', 'FDFCatalogDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type1HalftoneDictionary'] = ['SkPdfType1HalftoneDictionary*', 'Type1HalftoneDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type10HalftoneDictionary'] = ['SkPdfType10HalftoneDictionary*', 'Type10HalftoneDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type6HalftoneDictionary'] = ['SkPdfType6HalftoneDictionary*', 'Type6HalftoneDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type5HalftoneDictionary'] = ['SkPdfType5HalftoneDictionary*', 'Type5HalftoneDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type16HalftoneDictionary'] = ['SkPdfType16HalftoneDictionary*', 'Type16HalftoneDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type6ShadingDictionary'] = ['SkPdfType6ShadingDictionary*', 'Type6ShadingDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['StreamCommonDictionary'] = ['SkPdfStreamCommonDictionary*', 'StreamCommonDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FDFDictionary'] = ['SkPdfFDFDictionary*', 'FDFDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['LzwdecodeAndFlatedecodeFiltersDictionary'] = ['SkPdfLzwdecodeAndFlatedecodeFiltersDictionary*', 'LzwdecodeAndFlatedecodeFiltersDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['CcittfaxdecodeFilterDictionary'] = ['SkPdfCcittfaxdecodeFilterDictionary*', 'CcittfaxdecodeFilterDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['MarkedContentReferenceDictionary'] = ['SkPdfMarkedContentReferenceDictionary*', 'MarkedContentReferenceDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['SignatureDictionary'] = ['SkPdfSignatureDictionary*', 'SignatureDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['SoundAnnotationDictionary'] = ['SkPdfSoundAnnotationDictionary*', 'SoundAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['MovieAnnotationDictionary'] = ['SkPdfMovieAnnotationDictionary*', 'MovieAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type3FunctionDictionary'] = ['SkPdfType3FunctionDictionary*', 'Type3FunctionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type2FunctionDictionary'] = ['SkPdfType2FunctionDictionary*', 'Type2FunctionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['RubberStampAnnotationDictionary'] = ['SkPdfRubberStampAnnotationDictionary*', 'RubberStampAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['InkAnnotationDictionary'] = ['SkPdfInkAnnotationDictionary*', 'InkAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['SquareOrCircleAnnotation'] = ['SkPdfSquareOrCircleAnnotation*', 'SquareOrCircleAnnotationFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['MarkupAnnotationsDictionary'] = ['SkPdfMarkupAnnotationsDictionary*', 'MarkupAnnotationsDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['NameTreeNodeDictionary'] = ['SkPdfNameTreeNodeDictionary*', 'NameTreeNodeDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type5ShadingDictionary'] = ['SkPdfType5ShadingDictionary*', 'Type5ShadingDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ResourceDictionary'] = ['SkPdfResourceDictionary*', 'ResourceDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['SubmitFormActionDictionary'] = ['SkPdfSubmitFormActionDictionary*', 'SubmitFormActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['Type0FunctionDictionary'] = ['SkPdfType0FunctionDictionary*', 'Type0FunctionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FunctionCommonDictionary'] = ['SkPdfFunctionCommonDictionary*', 'FunctionCommonDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['NumberTreeNodeDictionary'] = ['SkPdfNumberTreeNodeDictionary*', 'NumberTreeNodeDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ActionDictionary'] = ['SkPdfActionDictionary*', 'ActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['WidgetAnnotationDictionary'] = ['SkPdfWidgetAnnotationDictionary*', 'WidgetAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['StructureTreeRootDictionary'] = ['SkPdfStructureTreeRootDictionary*', 'StructureTreeRootDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['JavascriptActionDictionary'] = ['SkPdfJavascriptActionDictionary*', 'JavascriptActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['AlternateImageDictionary'] = ['SkPdfAlternateImageDictionary*', 'AlternateImageDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['PDF_XOutputIntentDictionary'] = ['SkPdfPDF_XOutputIntentDictionary*', 'PDF_XOutputIntentDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['DocumentInformationDictionary'] = ['SkPdfDocumentInformationDictionary*', 'DocumentInformationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['MetadataStreamDictionary'] = ['SkPdfMetadataStreamDictionary*', 'MetadataStreamDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ImportDataActionDictionary'] = ['SkPdfImportDataActionDictionary*', 'ImportDataActionDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['PagePieceDictionary'] = ['SkPdfPagePieceDictionary*', 'PagePieceDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ApplicationDataDictionary'] = ['SkPdfApplicationDataDictionary*', 'ApplicationDataDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ComponentsWithMetadataDictionary'] = ['SkPdfComponentsWithMetadataDictionary*', 'ComponentsWithMetadataDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['PrinterMarkFormDictionary'] = ['SkPdfPrinterMarkFormDictionary*', 'PrinterMarkFormDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['StructureElementDictionary'] = ['SkPdfStructureElementDictionary*', 'StructureElementDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['PrinterMarkAnnotationDictionary'] = ['SkPdfPrinterMarkAnnotationDictionary*', 'PrinterMarkAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['SoftMaskImageDictionary'] = ['SkPdfSoftMaskImageDictionary*', 'SoftMaskImageDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['TransparencyGroupDictionary'] = ['SkPdfTransparencyGroupDictionary*', 'TransparencyGroupDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['SoftMaskDictionary'] = ['SkPdfSoftMaskDictionary*', 'SoftMaskDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['BorderStyleDictionary'] = ['SkPdfBorderStyleDictionary*', 'BorderStyleDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['PopUpAnnotationDictionary'] = ['SkPdfPopUpAnnotationDictionary*', 'PopUpAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FDFTrailerDictionary'] = ['SkPdfFDFTrailerDictionary*', 'FDFTrailerDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['LineAnnotationDictionary'] = ['SkPdfLineAnnotationDictionary*', 'LineAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['FreeTextAnnotationDictionary'] = ['SkPdfFreeTextAnnotationDictionary*', 'FreeTextAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['ALinkAnnotationDictionary'] = ['SkPdfALinkAnnotationDictionary*', 'ALinkAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['TextAnnotationDictionary'] = ['SkPdfTextAnnotationDictionary*', 'TextAnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['WebCapturePageSetDictionary'] = ['SkPdfWebCapturePageSetDictionary*', 'WebCapturePageSetDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['AppearanceDictionary'] = ['SkPdfAppearanceDictionary*', 'AppearanceDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['CIDFontDescriptorDictionary'] = ['SkPdfCIDFontDescriptorDictionary*', 'CIDFontDescriptorDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['EmbeddedFontStreamDictionary'] = ['SkPdfEmbeddedFontStreamDictionary*', 'EmbeddedFontStreamDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
+  knowTypes['AnnotationDictionary'] = ['SkPdfAnnotationDictionary*', 'AnnotationDictionaryFromDictionary', datatypes.CppNull(), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary']
 
 
diff --git a/experimental/PdfViewer/generate_code.py b/experimental/PdfViewer/generate_code.py
index 02736d3..0028cf3 100644
--- a/experimental/PdfViewer/generate_code.py
+++ b/experimental/PdfViewer/generate_code.py
@@ -233,6 +233,7 @@
   
   def write(self):
     global fileHeaders 
+    global fileHeadersCpp 
     global knowTypes
   
     # generate enum
@@ -246,6 +247,7 @@
       cls.fEnumEnd = 'k' + name + '__End_SkPdfObjectType'
 
       fileHeaders.write('#include "SkPdf' + cls.fName + '_autogen.h"\n')
+      fileHeadersCpp.write('#include "SkPdf' + cls.fName + '_autogen.cpp"\n')
             
       if cls.fBase != '':
         self.fClasses[cls.fBase].fEnumSubclasses.append(cls.fEnum)
@@ -286,10 +288,12 @@
       enum = cls.fEnum
       
       fileClass = open('SkPdf' + cls.fName + '_autogen.h', 'w')
+      fileClassCpp = open('SkPdf' + cls.fName + '_autogen.cpp', 'w')
       fileClass.write('#ifndef __DEFINED__SkPdf' + cls.fName + '\n')
       fileClass.write('#define __DEFINED__SkPdf' + cls.fName + '\n')
       fileClass.write('\n')
 
+      fileClassCpp.write('#include "SkPdf' + cls.fName + '_autogen.h"\n\n')
       fileClass.write('#include "SkPdfUtils.h"\n')
       fileClass.write('#include "SkPdfEnums_autogen.h"\n')
       fileClass.write('#include "SkPdfArray_autogen.h"\n')
@@ -363,6 +367,7 @@
           
           if prop.fCppName[0] == '[':
             fileClass.write('/*\n')  # comment code of the atributes that can have any name
+            fileClassCpp.write('/*\n')  # comment code of the atributes that can have any name
           
           # TODO(edisonn): has_foo();  
           fileClass.write('  bool has_' + prop.fCppName + '() const {\n')
@@ -372,16 +377,17 @@
 
           if len(prop.fTypes.split()) == 1:
             t = prop.fTypes.strip()
-            fileClass.write('  ' + knowTypes[t][0] + ' ' + prop.fCppName + '() const {\n')
-            fileClass.write('    ' + knowTypes[t][0] + ' ret;\n')
-            fileClass.write('    if (' + knowTypes[t][1] + '(fPodofoDoc, fPodofoObj->GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", &ret)) return ret;\n')
+            fileClass.write('  ' + knowTypes[t][0] + ' ' + prop.fCppName + '() const;\n')
+            fileClassCpp.write('' + knowTypes[t][0] + ' SkPdf' + cls.fName + '::' + prop.fCppName + '() const {\n')
+            fileClassCpp.write('  ' + knowTypes[t][0] + ' ret;\n')
+            fileClassCpp.write('  if (' + knowTypes[t][1] + '(fPodofoDoc, fPodofoObj->GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", &ret)) return ret;\n')
             if field.fRequired == False and prop.fDefault != '':
-              fileClass.write('    return ' + prop.fDefault.toCpp() + ';\n');
+              fileClassCpp.write('  return ' + prop.fDefault.toCpp() + ';\n');
             else:
-              fileClass.write('    // TODO(edisonn): warn about missing required field, assert for known good pdfs\n')
-              fileClass.write('    return ' + knowTypes[t][2].toCpp() + ';\n');
-            fileClass.write('  }\n') 
-            fileClass.write('\n')
+              fileClassCpp.write('  // TODO(edisonn): warn about missing required field, assert for known good pdfs\n')
+              fileClassCpp.write('  return ' + knowTypes[t][2].toCpp() + ';\n');
+            fileClassCpp.write('}\n') 
+            fileClassCpp.write('\n')
           else:
             for type in prop.fTypes.split():
               t = type.strip()
@@ -392,17 +398,19 @@
               fileClass.write('  }\n')
               fileClass.write('\n')
 
-              fileClass.write('  ' + knowTypes[t][0] + ' get' + prop.fCppName + 'As' + t.title() + '() const {\n')
-              fileClass.write('    ' + knowTypes[t][0] + ' ret = ' + knowTypes[t][2].toCpp() + ';\n')
-              fileClass.write('    if (' + knowTypes[t][1] + '(fPodofoDoc, fPodofoObj->GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", &ret)) return ret;\n')
-              fileClass.write('    // TODO(edisonn): warn about missing required field, assert for known good pdfs\n')
-              fileClass.write('    return ' + knowTypes[t][2].toCpp() + ';\n')
-              fileClass.write('  }\n') 
-              fileClass.write('\n')
+              fileClass.write('  ' + knowTypes[t][0] + ' get' + prop.fCppName + 'As' + t.title() + '() const;\n')
+              fileClassCpp.write('' + knowTypes[t][0] + ' SkPdf' + cls.fName + '::get' + prop.fCppName + 'As' + t.title() + '() const {\n')
+              fileClassCpp.write('  ' + knowTypes[t][0] + ' ret = ' + knowTypes[t][2].toCpp() + ';\n')
+              fileClassCpp.write('  if (' + knowTypes[t][1] + '(fPodofoDoc, fPodofoObj->GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", &ret)) return ret;\n')
+              fileClassCpp.write('  // TODO(edisonn): warn about missing required field, assert for known good pdfs\n')
+              fileClassCpp.write('  return ' + knowTypes[t][2].toCpp() + ';\n')
+              fileClassCpp.write('}\n') 
+              fileClassCpp.write('\n')
                
            
           if prop.fCppName[0] == '[':
             fileClass.write('*/\n')  # comment code of the atributes that can have any name
+            fileClassCpp.write('*/\n')  # comment code of the atributes that can have any name
          
 
       fileClass.write('};\n')
@@ -410,6 +418,7 @@
 
       fileClass.write('#endif  // __DEFINED__SkPdf' + cls.fName + '\n')
       fileClass.close()
+      fileClassCpp.close()
     
       
     
@@ -419,25 +428,30 @@
     # generate parser  
     # TODO(edisonn): fast recognition based on must attributes.
     fileMapper = open('SkPdfPodofoMapper_autogen.h', 'w')
+    fileMapperCpp = open('SkPdfPodofoMapper_autogen.cpp', 'w')
     fileMapper.write('#ifndef __DEFINED__SkPdfPodofoMapper\n')
     fileMapper.write('#define __DEFINED__SkPdfPodofoMapper\n')
     fileMapper.write('\n')
 
     fileMapper.write('#include "SkPdfHeaders_autogen.h"\n')
-    fileMapper.write('class PodofoMapper {\n')
-    fileMapper.write('public:\n')
+    fileMapperCpp.write('#include "SkPdfPodofoMapper_autogen.h"\n')
+#    fileMapper.write('class PodofoMapper {\n')
+#    fileMapper.write('public:\n')
     for name in self.fClassesNamesInOrder:
       cls = self.fClasses[name]
       
 
-      fileMapper.write('  static bool map(const SkPdfObject& in, SkPdf' + name + '** out) {\n')
-      fileMapper.write('    return map(*in.doc(), *in.podofo(), out);\n')
-      fileMapper.write('  }\n') 
-      fileMapper.write('\n')
+      fileMapper.write('bool map' + name + '(const SkPdfObject& in, SkPdf' + name + '** out);\n')
 
-      fileMapper.write('  static bool map(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdf' + name + '** out) {\n')
-      fileMapper.write('    if (!is' + name + '(podofoDoc, podofoObj)) return false;\n')
-      fileMapper.write('\n')
+      fileMapperCpp.write('bool map' + name + '(const SkPdfObject& in, SkPdf' + name + '** out) {\n')
+      fileMapperCpp.write('  return map' + name + '(*in.doc(), *in.podofo(), out);\n')
+      fileMapperCpp.write('}\n') 
+      fileMapperCpp.write('\n')
+
+      fileMapper.write('bool map' + name + '(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdf' + name + '** out);\n')
+      fileMapperCpp.write('bool map' + name + '(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdf' + name + '** out) {\n')
+      fileMapperCpp.write('  if (!is' + name + '(podofoDoc, podofoObj)) return false;\n')
+      fileMapperCpp.write('\n')
 
       # stream must be last one
       hasStream = False
@@ -445,34 +459,35 @@
         if cls.fName == 'Object' and enumToCls[sub].fName == 'Stream':
           hasStream = True
         else:
-          fileMapper.write('    if (map(podofoDoc, podofoObj, (SkPdf' + enumToCls[sub].fName + '**)out)) return true;\n')
+          fileMapperCpp.write('  if (map' + enumToCls[sub].fName + '(podofoDoc, podofoObj, (SkPdf' + enumToCls[sub].fName + '**)out)) return true;\n')
       
       if hasStream:
-        fileMapper.write('    if (map(podofoDoc, podofoObj, (SkPdfStream**)out)) return true;\n')
+        fileMapperCpp.write('  if (mapStream(podofoDoc, podofoObj, (SkPdfStream**)out)) return true;\n')
       
 
-      fileMapper.write('\n')
+      fileMapperCpp.write('\n')
       
-      fileMapper.write('    *out = new SkPdf' + name + '(&podofoDoc, &podofoObj);\n')
-      fileMapper.write('    return true;\n')        
-      fileMapper.write('  }\n') 
-      fileMapper.write('\n')
+      fileMapperCpp.write('  *out = new SkPdf' + name + '(&podofoDoc, &podofoObj);\n')
+      fileMapperCpp.write('  return true;\n')        
+      fileMapperCpp.write('}\n') 
+      fileMapperCpp.write('\n')
        
     for name in self.fClassesNamesInOrder:
       cls = self.fClasses[name]
       
-      fileMapper.write('  static bool is' + name + '(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {\n')
+      fileMapper.write('bool is' + name + '(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj);\n')
+      fileMapperCpp.write('bool is' + name + '(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj) {\n')
       
       if cls.fCheck != '':
-        fileMapper.write('    return ' + cls.fCheck + ';\n')
+        fileMapperCpp.write('  return ' + cls.fCheck + ';\n')
       else:
         cntMust = 0
         for field in cls.fFields:
           prop = field.fProp
           if prop.fHasMust:
             cntMust = cntMust + 1
-            fileMapper.write('    ' + knowTypes[prop.fTypes.strip()][0] + ' ' + prop.fCppName + ';\n')
-            fileMapper.write('    if (!' + knowTypes[prop.fTypes.strip()][1] + '(&podofoDoc, podofoObj.GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", &' + prop.fCppName + ')) return false;\n')
+            fileMapperCpp.write('  ' + knowTypes[prop.fTypes.strip()][0] + ' ' + prop.fCppName + ';\n')
+            fileMapperCpp.write('  if (!' + knowTypes[prop.fTypes.strip()][1] + '(&podofoDoc, podofoObj.GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", &' + prop.fCppName + ')) return false;\n')
             
             eval = '';
             # TODO(edisonn): this could get out of hand, and could have poor performance if continued on this path
@@ -486,15 +501,32 @@
                   eval = '(' + prop.fCppName + ' != ' + cnd.toCpp() + ')'
                 else:
                   eval = eval + ' && ' + '(' + prop.fCppName + ' != ' + cnd.toCpp() + ')'
-              fileMapper.write('    if (' + eval + ') return false;\n')
-              fileMapper.write('\n')
+              fileMapperCpp.write('  if (' + eval + ') return false;\n')
+              fileMapperCpp.write('\n')
       
-        fileMapper.write('    return true;\n')
+        fileMapperCpp.write('  return true;\n')
               
-      fileMapper.write('  }\n') 
-      fileMapper.write('\n')    
+      fileMapperCpp.write('}\n') 
+      fileMapperCpp.write('\n')    
     
-    fileMapper.write('};\n') 
+      fileMapper.write('bool ' + name + 'FromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdf' + name + '** data);\n')
+      fileMapperCpp.write('bool ' + name + 'FromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, SkPdf' + name + '** data) {\n')
+      fileMapperCpp.write('  const PdfObject* value = resolveReferenceObject(pdfDoc, dict.GetKey(PdfName(key)), true);\n')
+      fileMapperCpp.write('  if (value == NULL) { return false; }\n')
+      fileMapperCpp.write('  if (data == NULL) { return true; }\n')
+      fileMapperCpp.write('  return map' + name + '(*pdfDoc, *value, (SkPdf' + name + '**)data);\n')
+      fileMapperCpp.write('}\n')
+      fileMapperCpp.write('\n')
+
+      fileMapper.write('bool ' + name + 'FromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdf' + name + '** data);\n')
+      fileMapperCpp.write('bool ' + name + 'FromDictionary(const PdfMemDocument* pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdf' + name + '** data) {\n')
+      fileMapperCpp.write('  if (' + name + 'FromDictionary(pdfDoc, dict, key, data)) return true;\n')
+      fileMapperCpp.write('  if (abr == NULL || *abr == \'\\0\') return false;\n')
+      fileMapperCpp.write('  return ' + name + 'FromDictionary(pdfDoc, dict, abr, data);\n')
+      fileMapperCpp.write('}\n')
+      fileMapperCpp.write('\n')
+          
+    #fileMapper.write('};\n') 
     fileMapper.write('\n')
     
     fileMapper.write('#endif  // __DEFINED__SkPdfPodofoMapper\n')
@@ -504,15 +536,19 @@
 
 def generateCode():
   global fileHeaders 
+  global fileHeadersCpp 
   global knowTypes
 
   fileHeaders = open('SkPdfHeaders_autogen.h', 'w')
+  fileHeadersCpp = open('SkPdfHeaders_autogen.cpp', 'w')
   fileHeaders.write('#ifndef __DEFINED__SkPdfHeaders\n')
   fileHeaders.write('#define __DEFINED__SkPdfHeaders\n')
   fileHeaders.write('\n')
   
   fileHeaders.write('#include "SkPdfEnums_autogen.h"\n')
 
+  fileHeadersCpp.write('#include "SkPdfHeaders_autogen.h"\n')
+
   manager = PdfClassManager()
   
   manager.addClass('Object')
@@ -581,6 +617,7 @@
   
   fileHeaders.write('#endif  // __DEFINED__SkPdfHeaders\n')
   fileHeaders.close()
+  fileHeadersCpp.close()
   
   return 1
 
diff --git a/experimental/PdfViewer/pdf_viewer_main.cpp b/experimental/PdfViewer/pdf_viewer_main.cpp
index 61997fa..20a6cae 100644
--- a/experimental/PdfViewer/pdf_viewer_main.cpp
+++ b/experimental/PdfViewer/pdf_viewer_main.cpp
@@ -1,10 +1,3 @@
-/*
- * 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 "SkCanvas.h"
 #include "SkDevice.h"
 #include "SkForceLinking.h"
@@ -18,2509 +11,8 @@
 #include "SkTArray.h"
 #include "picture_utils.h"
 
-#include <iostream>
-#include <cstdio>
-#include <stack>
-
-#include "podofo.h"
-using namespace PoDoFo;
-
-
-__SK_FORCE_IMAGE_DECODER_LINKING;
-
-// TODO(edisonn): tool, show what objects were read at least, show the ones not even read
-// keep for each object pos in file
-// plug in for VS? syntax coloring, show selected object ... from the text, or from rendered x,y
-
-// TODO(edisonn): security - validate all the user input, all pdf!
-
-
-#include "SkPdfHeaders_autogen.h"
-#include "SkPdfPodofoMapper_autogen.h"
 #include "SkPdfParser.h"
 
-#include "SkPdfBasics.h"
-#include "SkPdfUtils.h"
-
-#include "SkPdfFont.h"
-
-// TODO(edisonn): fix the mess with the files.
-#include "SkPdfFont.cpp"
-#include "SkPdfBasics.cpp"
-#include "SkPdfUtils.cpp"
-
-bool skpdfmap(const PdfMemDocument& podofoDoc, const PdfObject& podofoObj, SkPdfObject** out) {
-    return PodofoMapper::map(podofoDoc, podofoObj, out);
-}
-
-
-/*
- * TODO(edisonn):
- * - all font types and all ppdf font features
- *      - word spacing
- *      - load font for baidu.pdf
- *      - load font for youtube.pdf
- *      - parser for pdf from the definition already available in pdfspec_autogen.py
- *      - all docs from ~/work
- * - encapsulate podofo in the pdf api so the skpdf does not know anything about podofo ... in progress
- * - load gs/ especially smask and already known prop (skp) ... in progress
- * - wrapper on classes for customizations? e.g.
- * SkPdfPageObjectVanila - has only the basic loaders/getters
- * SkPdfPageObject : public SkPdfPageObjectVanila, extends, and I can add customizations here
- * need to find a nice object model for all this with constructors and factories
- * - deal with inheritable automatically ?
- * - deal with specific type in spec directly, add all dictionary types to known types
-*/
-
-
-// TODO(edisonn): move in trace util.
-#ifdef PDF_TRACE
-static void SkTraceMatrix(const SkMatrix& matrix, const char* sz = "") {
-    printf("SkMatrix %s ", sz);
-    for (int i = 0 ; i < 9 ; i++) {
-        printf("%f ", SkScalarToDouble(matrix.get(i)));
-    }
-    printf("\n");
-}
-
-static void SkTraceRect(const SkRect& rect, const char* sz = "") {
-    printf("SkRect %s ", sz);
-    printf("x = %f ", SkScalarToDouble(rect.x()));
-    printf("y = %f ", SkScalarToDouble(rect.y()));
-    printf("w = %f ", SkScalarToDouble(rect.width()));
-    printf("h = %f ", SkScalarToDouble(rect.height()));
-    printf("\n");
-}
-
-#else
-#define SkTraceMatrix(a,b)
-#define SkTraceRect(a,b)
-#endif
-
-using namespace std;
-using namespace PoDoFo;
-
-// Utilities
-static void setup_bitmap(SkBitmap* bitmap, int width, int height, SkColor color = SK_ColorWHITE) {
-    bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height);
-
-    bitmap->allocPixels();
-    bitmap->eraseColor(color);
-}
-
-// TODO(edisonn): synonyms? DeviceRGB and RGB ...
-int GetColorSpaceComponents(const std::string& colorSpace) {
-    if (colorSpace == "DeviceCMYK") {
-        return 4;
-    } else if (colorSpace == "DeviceGray" ||
-            colorSpace == "CalGray" ||
-            colorSpace == "Indexed") {
-        return 1;
-    } else if (colorSpace == "DeviceRGB" ||
-            colorSpace == "CalRGB" ||
-            colorSpace == "Lab") {
-        return 3;
-    } else {
-        return 0;
-    }
-}
-
-const PdfObject* resolveReferenceObject(const PdfMemDocument* pdfDoc,
-                                  const PdfObject* obj,
-                                  bool resolveOneElementArrays) {
-    while (obj && (obj->IsReference() || (resolveOneElementArrays &&
-                                          obj->IsArray() &&
-                                          obj->GetArray().GetSize() == 1))) {
-        if (obj->IsReference()) {
-            // We need to force the non const, the only update we will do is for recurssion checks.
-            PdfReference& ref = (PdfReference&)obj->GetReference();
-            obj = pdfDoc->GetObjects().GetObject(ref);
-        } else {
-            obj = &obj->GetArray()[0];
-        }
-    }
-
-    return obj;
-}
-
-static SkMatrix SkMatrixFromPdfMatrix(double array[6]) {
-    SkMatrix matrix;
-    matrix.setAll(SkDoubleToScalar(array[0]),
-                  SkDoubleToScalar(array[2]),
-                  SkDoubleToScalar(array[4]),
-                  SkDoubleToScalar(array[1]),
-                  SkDoubleToScalar(array[3]),
-                  SkDoubleToScalar(array[5]),
-                  SkDoubleToScalar(0),
-                  SkDoubleToScalar(0),
-                  SkDoubleToScalar(1));
-
-    return matrix;
-}
-
-SkMatrix SkMatrixFromPdfArray(SkPdfArray* pdfArray) {
-    double array[6];
-
-    // TODO(edisonn): security issue, ret if size() != 6
-    for (int i = 0; i < 6; i++) {
-        const PdfObject* elem = resolveReferenceObject(pdfArray->doc(), (*pdfArray)[i]->podofo());
-        if (elem == NULL || (!elem->IsReal() && !elem->IsNumber())) {
-            return SkMatrix::I();  // TODO(edisonn): report issue
-        }
-        array[i] = elem->GetReal();
-    }
-
-    return SkMatrixFromPdfMatrix(array);
-}
-
-PdfContext* gPdfContext = NULL;
-SkBitmap* gDumpBitmap = NULL;
-SkCanvas* gDumpCanvas = NULL;
-char gLastKeyword[100] = "";
-int gLastOpKeyword = -1;
-char allOpWithVisualEffects[100] = ",S,s,f,F,f*,B,B*,b,b*,n,Tj,TJ,\',\",d0,d1,sh,EI,Do,EX,";
-int gReadOp = 0;
-
-
-
-bool hasVisualEffect(const char* pdfOp) {
-    return true;
-    if (*pdfOp == '\0') return false;
-
-    char markedPdfOp[100] = ",";
-    strcat(markedPdfOp, pdfOp);
-    strcat(markedPdfOp, ",");
-
-    return (strstr(allOpWithVisualEffects, markedPdfOp) != NULL);
-}
-
-// TODO(edisonn): Pass PdfContext and SkCanvasd only with the define for instrumentation.
-static bool readToken(SkPdfTokenizer* fTokenizer, PdfToken* token) {
-    bool ret = fTokenizer->readToken(token);
-
-    gReadOp++;
-
-#ifdef PDF_TRACE_DIFF_IN_PNG
-    // TODO(edisonn): compare with old bitmap, and save only new bits are available, and save
-    // the numbar and name of last operation, so the file name will reflect op that changed.
-    if (hasVisualEffect(gLastKeyword)) {  // TODO(edisonn): and has dirty bits.
-        gDumpCanvas->flush();
-
-        SkBitmap bitmap;
-        setup_bitmap(&bitmap, gDumpBitmap->width(), gDumpBitmap->height());
-
-        memcpy(bitmap.getPixels(), gDumpBitmap->getPixels(), gDumpBitmap->getSize());
-
-        SkAutoTUnref<SkDevice> device(SkNEW_ARGS(SkDevice, (bitmap)));
-        SkCanvas canvas(device);
-
-        // draw context stuff here
-        SkPaint blueBorder;
-        blueBorder.setColor(SK_ColorBLUE);
-        blueBorder.setStyle(SkPaint::kStroke_Style);
-        blueBorder.setTextSize(SkDoubleToScalar(20));
-
-        SkString str;
-
-        const SkClipStack* clipStack = gDumpCanvas->getClipStack();
-        if (clipStack) {
-            SkClipStack::Iter iter(*clipStack, SkClipStack::Iter::kBottom_IterStart);
-            const SkClipStack::Element* elem;
-            double y = 0;
-            int total = 0;
-            while (elem = iter.next()) {
-                total++;
-                y += 30;
-
-                switch (elem->getType()) {
-                    case SkClipStack::Element::kRect_Type:
-                        canvas.drawRect(elem->getRect(), blueBorder);
-                        canvas.drawText("Rect Clip", strlen("Rect Clip"), SkDoubleToScalar(10), SkDoubleToScalar(y), blueBorder);
-                        break;
-                    case SkClipStack::Element::kPath_Type:
-                        canvas.drawPath(elem->getPath(), blueBorder);
-                        canvas.drawText("Path Clip", strlen("Path Clip"), SkDoubleToScalar(10), SkDoubleToScalar(y), blueBorder);
-                        break;
-                    case SkClipStack::Element::kEmpty_Type:
-                        canvas.drawText("Empty Clip!!!", strlen("Empty Clip!!!"), SkDoubleToScalar(10), SkDoubleToScalar(y), blueBorder);
-                        break;
-                    default:
-                        canvas.drawText("Unkown Clip!!!", strlen("Unkown Clip!!!"), SkDoubleToScalar(10), SkDoubleToScalar(y), blueBorder);
-                        break;
-                }
-            }
-
-            y += 30;
-            str.printf("Number of clips in stack: %i", total);
-            canvas.drawText(str.c_str(), str.size(), SkDoubleToScalar(10), SkDoubleToScalar(y), blueBorder);
-        }
-
-        const SkRegion& clipRegion = gDumpCanvas->getTotalClip();
-        SkPath clipPath;
-        if (clipRegion.getBoundaryPath(&clipPath)) {
-            SkPaint redBorder;
-            redBorder.setColor(SK_ColorRED);
-            redBorder.setStyle(SkPaint::kStroke_Style);
-            canvas.drawPath(clipPath, redBorder);
-        }
-
-        canvas.flush();
-
-        SkString out;
-
-        // TODO(edisonn): get the image, and overlay on top of it, the clip , grafic state, teh stack,
-        // ... and other properties, to be able to debug th code easily
-
-        out.appendf("/usr/local/google/home/edisonn/log_view2/step-%i-%s.png", gLastOpKeyword, gLastKeyword);
-        SkImageEncoder::EncodeFile(out.c_str(), bitmap, SkImageEncoder::kPNG_Type, 100);
-    }
-
-    if (token->fType == kKeyword_TokenType) {
-        strcpy(gLastKeyword, token->fKeyword);
-        gLastOpKeyword = gReadOp;
-    } else {
-        strcpy(gLastKeyword, "");
-    }
-#endif
-
-    return ret;
-}
-
-// TODO(edisonn): Document PdfTokenLooper and subclasses.
-class PdfTokenLooper {
-protected:
-    PdfTokenLooper* fParent;
-    SkPdfTokenizer* fTokenizer;
-    PdfContext* fPdfContext;
-    SkCanvas* fCanvas;
-
-public:
-    PdfTokenLooper(PdfTokenLooper* parent,
-                   SkPdfTokenizer* tokenizer,
-                   PdfContext* pdfContext,
-                   SkCanvas* canvas)
-        : fParent(parent), fTokenizer(tokenizer), fPdfContext(pdfContext), fCanvas(canvas) {}
-
-    virtual PdfResult consumeToken(PdfToken& token) = 0;
-    virtual void loop() = 0;
-
-    void setUp(PdfTokenLooper* parent) {
-        fParent = parent;
-        fTokenizer = parent->fTokenizer;
-        fPdfContext = parent->fPdfContext;
-        fCanvas = parent->fCanvas;
-    }
-};
-
-class PdfMainLooper : public PdfTokenLooper {
-public:
-    PdfMainLooper(PdfTokenLooper* parent,
-                  SkPdfTokenizer* tokenizer,
-                  PdfContext* pdfContext,
-                  SkCanvas* canvas)
-        : PdfTokenLooper(parent, tokenizer, pdfContext, canvas) {}
-
-    virtual PdfResult consumeToken(PdfToken& token);
-    virtual void loop();
-};
-
-class PdfInlineImageLooper : public PdfTokenLooper {
-public:
-    PdfInlineImageLooper()
-        : PdfTokenLooper(NULL, NULL, NULL, NULL) {}
-
-    virtual PdfResult consumeToken(PdfToken& token);
-    virtual void loop();
-    PdfResult done();
-};
-
-class PdfCompatibilitySectionLooper : public PdfTokenLooper {
-public:
-    PdfCompatibilitySectionLooper()
-        : PdfTokenLooper(NULL, NULL, NULL, NULL) {}
-
-    virtual PdfResult consumeToken(PdfToken& token);
-    virtual void loop();
-};
-
-typedef PdfResult (*PdfOperatorRenderer)(PdfContext*, SkCanvas*, PdfTokenLooper**);
-
-map<std::string, PdfOperatorRenderer> gPdfOps;
-
-map<std::string, int> gRenderStats[kCount_PdfResult];
-
-char* gRenderStatsNames[kCount_PdfResult] = {
-    "Success",
-    "Partially implemented",
-    "Not yet implemented",
-    "Ignore Error",
-    "Error",
-    "Unsupported/Unknown"
-};
-
-static SkTypeface* SkTypefaceFromPdfFont(PdfFont* font) {
-    if (font == NULL) {
-        return SkTypeface::CreateFromName("Times New Roman", SkTypeface::kNormal);
-    }
-
-    PdfObject* fontObject = font->GetObject();
-
-    PdfObject* pBaseFont = NULL;
-    // TODO(edisonn): warning, PoDoFo has a bug in PdfFont constructor, does not call InitVars()
-    // for now fixed locally.
-    pBaseFont = fontObject->GetIndirectKey( "BaseFont" );
-    const char* pszBaseFontName = pBaseFont->GetName().GetName().c_str();
-
-#ifdef PDF_TRACE
-    std::string str;
-    fontObject->ToString(str);
-    printf("Base Font Name: %s\n", pszBaseFontName);
-    printf("Font Object Data: %s\n", str.c_str());
-#endif
-
-    SkTypeface* typeface = SkTypefaceFromPdfStandardFont(pszBaseFontName, font->IsBold(), font->IsItalic());
-
-    if (typeface != NULL) {
-        return typeface;
-    }
-
-    char name[1000];
-    // HACK
-    strncpy(name, pszBaseFontName, 1000);
-    char* comma = strstr(name, ",");
-    char* dash = strstr(name, "-");
-    if (comma) *comma = '\0';
-    if (dash) *dash = '\0';
-
-    typeface = SkTypeface::CreateFromName(
-                name,
-                SkTypeface::Style((font->IsBold() ? SkTypeface::kBold : 0) |
-                                  (font->IsItalic() ? SkTypeface::kItalic : 0)));
-
-    if (typeface != NULL) {
-#ifdef PDF_TRACE
-    printf("HACKED FONT found %s\n", name);
-#endif
-        return typeface;
-    }
-
-#ifdef PDF_TRACE
-    printf("FONT_NOT_FOUND %s\n", pszBaseFontName);
-#endif
-
-    // TODO(edisonn): Report Warning, NYI
-    return SkTypeface::CreateFromName(
-                "Times New Roman",
-                SkTypeface::Style((font->IsBold() ? SkTypeface::kBold : 0) |
-                                  (font->IsItalic() ? SkTypeface::kItalic : 0)));
-}
-
-PdfResult DrawText(PdfContext* pdfContext,
-                   const SkPdfObject* str,
-                   SkCanvas* canvas)
-{
-
-    SkPdfFont* skfont = pdfContext->fGraphicsState.fSkFont;
-    if (skfont == NULL) {
-        skfont = SkPdfFont::Default();
-    }
-
-    SkUnencodedText binary(str);
-
-    SkDecodedText decoded;
-
-    if (skfont->encoding() == NULL) {
-        // TODO(edisonn): report warning
-        return kNYI_PdfResult;
-    }
-
-    skfont->encoding()->decodeText(binary, &decoded);
-
-    SkPaint paint;
-    // TODO(edisonn): when should fCurFont->GetFontSize() used? When cur is fCurFontSize == 0?
-    // Or maybe just not call setTextSize at all?
-    if (pdfContext->fGraphicsState.fCurFontSize != 0) {
-        paint.setTextSize(SkDoubleToScalar(pdfContext->fGraphicsState.fCurFontSize));
-    }
-
-//    if (fCurFont && fCurFont->GetFontScale() != 0) {
-//        paint.setTextScaleX(SkFloatToScalar(fCurFont->GetFontScale() / 100.0));
-//    }
-
-    pdfContext->fGraphicsState.applyGraphicsState(&paint, false);
-
-    canvas->save();
-
-#if 1
-    SkMatrix matrix = pdfContext->fGraphicsState.fMatrixTm;
-
-    SkPoint point1;
-    pdfContext->fGraphicsState.fMatrixTm.mapXY(SkIntToScalar(0), SkIntToScalar(0), &point1);
-
-    SkMatrix mirror;
-    mirror.setTranslate(0, -point1.y());
-    // TODO(edisonn): fix rotated text, and skewed too
-    mirror.postScale(SK_Scalar1, -SK_Scalar1);
-    // TODO(edisonn): post rotate, skew
-    mirror.postTranslate(0, point1.y());
-
-    matrix.postConcat(mirror);
-
-    canvas->setMatrix(matrix);
-
-    SkTraceMatrix(matrix, "mirrored");
-#endif
-
-    skfont->drawText(decoded, &paint, pdfContext, canvas, &pdfContext->fGraphicsState.fMatrixTm);
-    canvas->restore();
-
-    return kPartial_PdfResult;
-}
-
-// TODO(edisonn): create header files with declarations!
-PdfResult PdfOp_q(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper);
-PdfResult PdfOp_Q(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper);
-PdfResult PdfOp_Tw(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper);
-PdfResult PdfOp_Tc(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper);
-
-// TODO(edisonn): deal with synonyms (/BPC == /BitsPerComponent), here or in GetKey?
-// Always pass long form in key, and have a map of long -> short key
-bool LongFromDictionary(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        long* data) {
-    const PdfObject* value = resolveReferenceObject(pdfDoc,
-                                              dict.GetKey(PdfName(key)));
-
-    if (value == NULL || !value->IsNumber()) {
-        return false;
-    }
-    if (data == NULL) {
-        return true;
-    }
-
-    *data = value->GetNumber();
-    return true;
-}
-
-bool LongFromDictionary(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        const char* abr,
-                        long* data) {
-    if (LongFromDictionary(pdfDoc, dict, key, data)) return true;
-    if (abr == NULL || *abr == '\0') return false;
-    return LongFromDictionary(pdfDoc, dict, abr, data);
-}
-
-bool DoubleFromDictionary(const PdfMemDocument* pdfDoc,
-                          const PdfDictionary& dict,
-                          const char* key,
-                          double* data) {
-    const PdfObject* value = resolveReferenceObject(pdfDoc,
-                                              dict.GetKey(PdfName(key)));
-
-    if (value == NULL || (!value->IsReal() && !value->IsNumber())) {
-        return false;
-    }
-    if (data == NULL) {
-        return true;
-    }
-
-    *data = value->GetReal();
-    return true;
-}
-
-bool DoubleFromDictionary(const PdfMemDocument* pdfDoc,
-                          const PdfDictionary& dict,
-                          const char* key,
-                          const char* abr,
-                          double* data) {
-    if (DoubleFromDictionary(pdfDoc, dict, key, data)) return true;
-    if (abr == NULL || *abr == '\0') return false;
-    return DoubleFromDictionary(pdfDoc, dict, abr, data);
-}
-
-
-bool BoolFromDictionary(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        bool* data) {
-    const PdfObject* value = resolveReferenceObject(pdfDoc,
-                                              dict.GetKey(PdfName(key)));
-
-    if (value == NULL || !value->IsBool()) {
-        return false;
-    }
-    if (data == NULL) {
-        return true;
-    }
-
-    *data = value->GetBool();
-    return true;
-}
-
-bool BoolFromDictionary(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        const char* abr,
-                        bool* data) {
-    if (BoolFromDictionary(pdfDoc, dict, key, data)) return true;
-    if (abr == NULL || *abr == '\0') return false;
-    return BoolFromDictionary(pdfDoc, dict, abr, data);
-}
-
-bool NameFromDictionary(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        std::string* data) {
-    const PdfObject* value = resolveReferenceObject(pdfDoc,
-                                              dict.GetKey(PdfName(key)),
-                                              true);
-    if (value == NULL || !value->IsName()) {
-        return false;
-    }
-    if (data == NULL) {
-        return true;
-    }
-
-    *data = value->GetName().GetName();
-    return true;
-}
-
-bool NameFromDictionary(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        const char* abr,
-                        std::string* data) {
-    if (NameFromDictionary(pdfDoc, dict, key, data)) return true;
-    if (abr == NULL || *abr == '\0') return false;
-    return NameFromDictionary(pdfDoc, dict, abr, data);
-}
-
-bool StringFromDictionary(const PdfMemDocument* pdfDoc,
-                          const PdfDictionary& dict,
-                          const char* key,
-                          std::string* data) {
-    const PdfObject* value = resolveReferenceObject(pdfDoc,
-                                              dict.GetKey(PdfName(key)),
-                                              true);
-    if (value == NULL || (!value->IsString() && !value->IsHexString())) {
-        return false;
-    }
-    if (data == NULL) {
-        return true;
-    }
-
-    *data = value->GetString().GetString();
-    return true;
-}
-
-bool StringFromDictionary(const PdfMemDocument* pdfDoc,
-                          const PdfDictionary& dict,
-                          const char* key,
-                          const char* abr,
-                          std::string* data) {
-    if (StringFromDictionary(pdfDoc, dict, key, data)) return true;
-    if (abr == NULL || *abr == '\0') return false;
-    return StringFromDictionary(pdfDoc, dict, abr, data);
-}
-
-bool ArrayFromDictionary(const PdfMemDocument* pdfDoc,
-                              const PdfDictionary& dict,
-                              const char* key,
-                              SkPdfArray** data) {
-    const PdfObject* value = resolveReferenceObject(pdfDoc,
-                                              dict.GetKey(PdfName(key)),
-                                              true);
-    if (value == NULL || !value->IsArray()) {
-        return false;
-    }
-    if (data == NULL) {
-        return true;
-    }
-
-    return PodofoMapper::map(*pdfDoc, *value, (SkPdfObject**)data);
-}
-
-
-bool ArrayFromDictionary(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        const char* abr,
-                        SkPdfArray** data) {
-    if (ArrayFromDictionary(pdfDoc, dict, key, data)) return true;
-    if (abr == NULL || *abr == '\0') return false;
-    return ArrayFromDictionary(pdfDoc, dict, abr, data);
-}
-
-
-bool DictionaryFromDictionary(const PdfMemDocument* pdfDoc,
-                              const PdfDictionary& dict,
-                              const char* key,
-                              SkPdfDictionary** data) {
-    const PdfObject* value = resolveReferenceObject(pdfDoc,
-                                              dict.GetKey(PdfName(key)),
-                                              true);
-    if (value == NULL || !value->IsDictionary()) {
-        return false;
-    }
-    if (data == NULL) {
-        return true;
-    }
-
-    return PodofoMapper::map(*pdfDoc, *value, (SkPdfObject**)data);
-}
-
-bool DictionaryFromDictionary(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        const char* abr,
-                        SkPdfDictionary** data) {
-    if (DictionaryFromDictionary(pdfDoc, dict, key, data)) return true;
-    if (abr == NULL || *abr == '\0') return false;
-    return DictionaryFromDictionary(pdfDoc, dict, abr, data);
-}
-
-template <typename T>
-bool DictionaryFromDictionary2(const PdfMemDocument* pdfDoc,
-                              const PdfDictionary& dict,
-                              const char* key,
-                              T** data) {
-    const PdfObject* value = resolveReferenceObject(pdfDoc,
-                                              dict.GetKey(PdfName(key)),
-                                              true);
-    if (value == NULL || !value->IsDictionary()) {
-        return false;
-    }
-
-    if (data == NULL) {
-        return true;
-    }
-
-    return PodofoMapper::map(*pdfDoc, *value, (T**)data);
-}
-
-template <typename T>
-bool DictionaryFromDictionary2(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        const char* abr,
-                        T** data) {
-    if (DictionaryFromDictionary2<T>(pdfDoc, dict, key, data)) return true;
-    if (abr == NULL || *abr == '\0') return false;
-    return DictionaryFromDictionary2<T>(pdfDoc, dict, abr, data);
-}
-
-bool ObjectFromDictionary(const PdfMemDocument* pdfDoc,
-                          const PdfDictionary& dict,
-                          const char* key,
-                          SkPdfObject** data) {
-    const PdfObject* value = resolveReferenceObject(pdfDoc,
-                                              dict.GetKey(PdfName(key)),
-                                              true);
-    if (value == NULL) {
-        return false;
-    }
-    if (data == NULL) {
-        return true;
-    }
-    return PodofoMapper::map(*pdfDoc, *value, data);
-}
-
-bool ObjectFromDictionary(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        const char* abr,
-                        SkPdfObject** data) {
-    if (ObjectFromDictionary(pdfDoc, dict, key, data)) return true;
-    if (abr == NULL || *abr == '\0') return false;
-    return ObjectFromDictionary(pdfDoc, dict, abr, data);
-}
-
-bool StreamFromDictionary(const PdfMemDocument* pdfDoc,
-                          const PdfDictionary& dict,
-                          const char* key,
-                          SkPdfStream** data) {
-    const PdfObject* value = resolveReferenceObject(pdfDoc,
-                                              dict.GetKey(PdfName(key)),
-                                              true);
-    if (value == NULL) {
-        return false;
-    }
-    if (data == NULL) {
-        return true;
-    }
-    return PodofoMapper::map(*pdfDoc, *value, data);
-}
-
-bool StreamFromDictionary(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        const char* abr,
-                        SkPdfStream** data) {
-    if (StreamFromDictionary(pdfDoc, dict, key, data)) return true;
-    if (abr == NULL || *abr == '\0') return false;
-    return StreamFromDictionary(pdfDoc, dict, abr, data);
-}
-
-
-// TODO(edisonn): perf!!!
-
-static SkColorTable* getGrayColortable() {
-    static SkColorTable* grayColortable = NULL;
-    if (grayColortable == NULL) {
-        SkPMColor* colors = new SkPMColor[256];
-        for (int i = 0 ; i < 256; i++) {
-            colors[i] = SkPreMultiplyARGB(255, i, i, i);
-        }
-        grayColortable = new SkColorTable(colors, 256);
-    }
-    return grayColortable;
-}
-
-SkBitmap transferImageStreamToBitmap(unsigned char* uncompressedStream, pdf_long uncompressedStreamLength,
-                                     int width, int height, int bytesPerLine,
-                                     int bpc, const std::string& colorSpace,
-                                     bool transparencyMask) {
-    SkBitmap bitmap;
-
-    int components = GetColorSpaceComponents(colorSpace);
-//#define MAX_COMPONENTS 10
-
-    int bitsPerLine = width * components * bpc;
-    // TODO(edisonn): assume start of lines are aligned at 32 bits?
-    // Is there a faster way to load the uncompressed stream into a bitmap?
-
-    // minimal support for now
-    if ((colorSpace == "DeviceRGB" || colorSpace == "RGB") && bpc == 8) {
-        SkColor* uncompressedStreamArgb = (SkColor*)malloc(width * height * sizeof(SkColor));
-
-        for (int h = 0 ; h < height; h++) {
-            long i = width * (height - 1 - h);
-            for (int w = 0 ; w < width; w++) {
-                uncompressedStreamArgb[i] = SkColorSetRGB(uncompressedStream[3 * w],
-                                                          uncompressedStream[3 * w + 1],
-                                                          uncompressedStream[3 * w + 2]);
-                i++;
-            }
-            uncompressedStream += bytesPerLine;
-        }
-
-        bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
-        bitmap.setPixels(uncompressedStreamArgb);
-    }
-    else if ((colorSpace == "DeviceGray" || colorSpace == "Gray") && bpc == 8) {
-        unsigned char* uncompressedStreamA8 = (unsigned char*)malloc(width * height);
-
-        for (int h = 0 ; h < height; h++) {
-            long i = width * (height - 1 - h);
-            for (int w = 0 ; w < width; w++) {
-                uncompressedStreamA8[i] = transparencyMask ? 255 - uncompressedStream[w] :
-                                                             uncompressedStream[w];
-                i++;
-            }
-            uncompressedStream += bytesPerLine;
-        }
-
-        bitmap.setConfig(transparencyMask ? SkBitmap::kA8_Config : SkBitmap::kIndex8_Config,
-                         width, height);
-        bitmap.setPixels(uncompressedStreamA8, transparencyMask ? NULL : getGrayColortable());
-    }
-
-    // TODO(edisonn): Report Warning, NYI, or error
-    return bitmap;
-}
-
-bool transferImageStreamToARGB(unsigned char* uncompressedStream, pdf_long uncompressedStreamLength,
-                               int width, int bytesPerLine,
-                               int bpc, const std::string& colorSpace,
-                               SkColor** uncompressedStreamArgb,
-                               pdf_long* uncompressedStreamLengthInBytesArgb) {
-    int components = GetColorSpaceComponents(colorSpace);
-//#define MAX_COMPONENTS 10
-
-    int bitsPerLine = width * components * bpc;
-    // TODO(edisonn): assume start of lines are aligned at 32 bits?
-    int height = uncompressedStreamLength / bytesPerLine;
-
-    // minimal support for now
-    if ((colorSpace == "DeviceRGB" || colorSpace == "RGB") && bpc == 8) {
-        *uncompressedStreamLengthInBytesArgb = width * height * 4;
-        *uncompressedStreamArgb = (SkColor*)malloc(*uncompressedStreamLengthInBytesArgb);
-
-        for (int h = 0 ; h < height; h++) {
-            long i = width * (height - 1 - h);
-            for (int w = 0 ; w < width; w++) {
-                (*uncompressedStreamArgb)[i] = SkColorSetRGB(uncompressedStream[3 * w],
-                                                             uncompressedStream[3 * w + 1],
-                                                             uncompressedStream[3 * w + 2]);
-                i++;
-            }
-            uncompressedStream += bytesPerLine;
-        }
-        return true;
-    }
-
-    if ((colorSpace == "DeviceGray" || colorSpace == "Gray") && bpc == 8) {
-        *uncompressedStreamLengthInBytesArgb = width * height * 4;
-        *uncompressedStreamArgb = (SkColor*)malloc(*uncompressedStreamLengthInBytesArgb);
-
-        for (int h = 0 ; h < height; h++) {
-            long i = width * (height - 1 - h);
-            for (int w = 0 ; w < width; w++) {
-                (*uncompressedStreamArgb)[i] = SkColorSetRGB(uncompressedStream[w],
-                                                             uncompressedStream[w],
-                                                             uncompressedStream[w]);
-                i++;
-            }
-            uncompressedStream += bytesPerLine;
-        }
-        return true;
-    }
-
-    return false;
-}
-
-// utils
-
-// TODO(edisonn): add cache, or put the bitmap property directly on the PdfObject
-// TODO(edisonn): deal with colorSpaces, we could add them to SkBitmap::Config
-// TODO(edisonn): preserve A1 format that skia knows, + fast convert from 111, 222, 444 to closest
-// skia format, through a table
-
-// this functions returns the image, it does not look at the smask.
-
-SkBitmap getImageFromObject(PdfContext* pdfContext, const SkPdfImageDictionary* image, bool transparencyMask) {
-    if (image == NULL || !image->valid()) {
-        // TODO(edisonn): report warning to be used in testing.
-        return SkBitmap();
-    }
-
-    // TODO (edisonn): Fast Jpeg(DCTDecode) draw, or fast PNG(FlateDecode) draw ...
-//    PdfObject* value = resolveReferenceObject(pdfContext->fPdfDoc,
-//                                              obj.GetDictionary().GetKey(PdfName("Filter")));
-//    if (value && value->IsArray() && value->GetArray().GetSize() == 1) {
-//        value = resolveReferenceObject(pdfContext->fPdfDoc,
-//                                       &value->GetArray()[0]);
-//    }
-//    if (value && value->IsName() && value->GetName().GetName() == "DCTDecode") {
-//        SkStream stream = SkStream::
-//        SkImageDecoder::Factory()
-//    }
-
-    long bpc = image->BitsPerComponent();
-    long width = image->Width();
-    long height = image->Height();
-    std::string colorSpace = "DeviceRGB";
-
-    // TODO(edisonn): color space can be an array too!
-    if (image->isColorSpaceAName()) {
-        colorSpace = image->getColorSpaceAsName();
-    }
-
-/*
-    bool imageMask = image->imageMask();
-
-    if (imageMask) {
-        if (bpc != 0 && bpc != 1) {
-            // TODO(edisonn): report warning to be used in testing.
-            return SkBitmap();
-        }
-        bpc = 1;
-    }
-*/
-
-    const PdfObject* obj = image->podofo();
-
-    char* uncompressedStream = NULL;
-    pdf_long uncompressedStreamLength = 0;
-
-    PdfResult ret = kPartial_PdfResult;
-    // TODO(edisonn): get rid of try/catch exceptions! We should not throw on user data!
-    try {
-        obj->GetStream()->GetFilteredCopy(&uncompressedStream, &uncompressedStreamLength);
-    } catch (PdfError& e) {
-        // TODO(edisonn): report warning to be used in testing.
-        return SkBitmap();
-    }
-
-    int bytesPerLine = uncompressedStreamLength / height;
-#ifdef PDF_TRACE
-    if (uncompressedStreamLength % height != 0) {
-        printf("Warning uncompressedStreamLength % height != 0 !!!\n");
-    }
-#endif
-
-    SkBitmap bitmap = transferImageStreamToBitmap(
-            (unsigned char*)uncompressedStream, uncompressedStreamLength,
-            width, height, bytesPerLine,
-            bpc, colorSpace,
-            transparencyMask);
-
-    free(uncompressedStream);
-
-    return bitmap;
-}
-
-SkBitmap getSmaskFromObject(PdfContext* pdfContext, const SkPdfImageDictionary* obj) {
-    const PdfObject* sMask = resolveReferenceObject(&pdfContext->fPdfDoc->podofo(),
-                                              obj->podofo()->GetDictionary().GetKey(PdfName("SMask")));
-
-#ifdef PDF_TRACE
-    std::string str;
-    if (sMask) {
-        sMask->ToString(str);
-        printf("/SMask of /Subtype /Image: %s\n", str.c_str());
-    }
-#endif
-
-    if (sMask) {
-        SkPdfImageDictionary skxobjmask(&pdfContext->fPdfDoc->podofo(), sMask);
-        return getImageFromObject(pdfContext, &skxobjmask, true);
-    }
-
-    // TODO(edisonn): implement GS SMask. Default to empty right now.
-    return pdfContext->fGraphicsState.fSMask;
-}
-
-PdfResult doXObject_Image(PdfContext* pdfContext, SkCanvas* canvas, const SkPdfImageDictionary* skpdfimage) {
-    if (skpdfimage == NULL || !skpdfimage->valid()) {
-        return kIgnoreError_PdfResult;
-    }
-
-    SkBitmap image = getImageFromObject(pdfContext, skpdfimage, false);
-    SkBitmap sMask = getSmaskFromObject(pdfContext, skpdfimage);
-
-    canvas->save();
-    canvas->setMatrix(pdfContext->fGraphicsState.fMatrix);
-    SkRect dst = SkRect::MakeXYWH(SkDoubleToScalar(0.0), SkDoubleToScalar(0.0), SkDoubleToScalar(1.0), SkDoubleToScalar(1.0));
-
-    if (sMask.empty()) {
-        canvas->drawBitmapRect(image, dst, NULL);
-    } else {
-        canvas->saveLayer(&dst, NULL);
-        canvas->drawBitmapRect(image, dst, NULL);
-        SkPaint xfer;
-        pdfContext->fGraphicsState.applyGraphicsState(&xfer, false);
-        xfer.setXfermodeMode(SkXfermode::kSrcOut_Mode); // SkXfermode::kSdtOut_Mode
-        canvas->drawBitmapRect(sMask, dst, &xfer);
-        canvas->restore();
-    }
-
-    canvas->restore();
-
-    return kPartial_PdfResult;
-}
-
-bool SkMatrixFromDictionary(const PdfMemDocument* pdfDoc,
-                            const PdfDictionary& dict,
-                            const char* key,
-                            SkMatrix** matrix) {
-    const PdfObject* value = resolveReferenceObject(pdfDoc,
-                                                    dict.GetKey(PdfName(key)));
-
-    if (value == NULL || !value->IsArray()) {
-        return false;
-    }
-
-    if (value->GetArray().GetSize() != 6) {
-        return false;
-    }
-
-    double array[6];
-    for (int i = 0; i < 6; i++) {
-        const PdfObject* elem = resolveReferenceObject(pdfDoc, &value->GetArray()[i]);
-        if (elem == NULL || (!elem->IsReal() && !elem->IsNumber())) {
-            return false;
-        }
-        array[i] = elem->GetReal();
-    }
-
-    *matrix = new SkMatrix();
-    **matrix = SkMatrixFromPdfMatrix(array);
-    return true;
-}
-
-bool SkMatrixFromDictionary(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        const char* abr,
-                        SkMatrix** data) {
-    if (SkMatrixFromDictionary(pdfDoc, dict, key, data)) return true;
-    if (abr == NULL || *abr == '\0') return false;
-    return SkMatrixFromDictionary(pdfDoc, dict, abr, data);
-
-}
-
-bool SkRectFromDictionary(const PdfMemDocument* pdfDoc,
-                          const PdfDictionary& dict,
-                          const char* key,
-                          SkRect** rect) {
-    const PdfObject* value = resolveReferenceObject(pdfDoc,
-                                                    dict.GetKey(PdfName(key)));
-
-    if (value == NULL || !value->IsArray()) {
-        return false;
-    }
-
-    if (value->GetArray().GetSize() != 4) {
-        return false;
-    }
-
-    double array[4];
-    for (int i = 0; i < 4; i++) {
-        const PdfObject* elem = resolveReferenceObject(pdfDoc, &value->GetArray()[i]);
-        if (elem == NULL || (!elem->IsReal() && !elem->IsNumber())) {
-            return false;
-        }
-        array[i] = elem->GetReal();
-    }
-
-    *rect = new SkRect();
-    **rect = SkRect::MakeLTRB(SkDoubleToScalar(array[0]),
-                              SkDoubleToScalar(array[1]),
-                              SkDoubleToScalar(array[2]),
-                              SkDoubleToScalar(array[3]));
-    return true;
-}
-
-bool SkRectFromDictionary(const PdfMemDocument* pdfDoc,
-                        const PdfDictionary& dict,
-                        const char* key,
-                        const char* abr,
-                        SkRect** data) {
-    if (SkRectFromDictionary(pdfDoc, dict, key, data)) return true;
-    if (abr == NULL || *abr == '\0') return false;
-    return SkRectFromDictionary(pdfDoc, dict, abr, data);
-
-}
-
-
-SkPdfObject* get(const SkPdfObject* obj, const char* key, const char* abr = "") {
-    SkPdfObject* ret = NULL;
-    if (obj == NULL) return NULL;
-    const SkPdfDictionary* dict = obj->asDictionary();
-    if (dict == NULL) return NULL;
-    if (!dict->podofo()->IsDictionary()) return NULL;
-    ObjectFromDictionary(dict->doc(), dict->podofo()->GetDictionary(), key, abr, &ret);
-    return ret;
-}
-
-PdfResult doXObject_Form(PdfContext* pdfContext, SkCanvas* canvas, SkPdfType1FormDictionary* skobj) {
-    if (!skobj || !skobj->podofo() || !skobj->podofo()->HasStream() || skobj->podofo()->GetStream() == NULL || skobj->podofo()->GetStream()->GetLength() == 0) {
-        return kOK_PdfResult;
-    }
-
-    PdfOp_q(pdfContext, canvas, NULL);
-    canvas->save();
-
-
-    if (skobj->Resources()) {
-        pdfContext->fGraphicsState.fResources = skobj->Resources();
-    }
-
-    SkTraceMatrix(pdfContext->fGraphicsState.fMatrix, "Current matrix");
-
-    if (skobj->Matrix()) {
-        pdfContext->fGraphicsState.fMatrix.preConcat(*skobj->Matrix());
-        pdfContext->fGraphicsState.fMatrixTm = pdfContext->fGraphicsState.fMatrix;
-        pdfContext->fGraphicsState.fMatrixTlm = pdfContext->fGraphicsState.fMatrix;
-        // TODO(edisonn) reset matrixTm and matricTlm also?
-    }
-
-    SkTraceMatrix(pdfContext->fGraphicsState.fMatrix, "Total matrix");
-
-    canvas->setMatrix(pdfContext->fGraphicsState.fMatrix);
-
-    if (skobj->BBox()) {
-        canvas->clipRect(*skobj->BBox(), SkRegion::kIntersect_Op, true);  // TODO(edisonn): AA from settings.
-    }
-
-    // TODO(edisonn): iterate smart on the stream even if it is compressed, tokenize it as we go.
-    // For this PdfContentsTokenizer needs to be extended.
-
-    PdfResult ret = kPartial_PdfResult;
-    SkPdfTokenizer tokenizer(skobj);
-    PdfMainLooper looper(NULL, &tokenizer, pdfContext, canvas);
-    looper.loop();
-
-    // TODO(edisonn): should we restore the variable stack at the same state?
-    // There could be operands left, that could be consumed by a parent tokenizer when we pop.
-    canvas->restore();
-    PdfOp_Q(pdfContext, canvas, NULL);
-    return ret;
-}
-
-PdfResult doXObject_PS(PdfContext* pdfContext, SkCanvas* canvas, const PdfObject& obj) {
-    return kNYI_PdfResult;
-}
-
-PdfResult doType3Char(PdfContext* pdfContext, SkCanvas* canvas, SkPdfObject* skobj, SkRect bBox, SkMatrix matrix, double textSize) {
-    if (!skobj || !skobj->podofo() || !skobj->podofo()->HasStream() || skobj->podofo()->GetStream() == NULL || skobj->podofo()->GetStream()->GetLength() == 0) {
-        return kOK_PdfResult;
-    }
-
-    PdfOp_q(pdfContext, canvas, NULL);
-    canvas->save();
-
-    pdfContext->fGraphicsState.fMatrixTm.preConcat(matrix);
-    pdfContext->fGraphicsState.fMatrixTm.preScale(SkDoubleToScalar(textSize), SkDoubleToScalar(textSize));
-
-    pdfContext->fGraphicsState.fMatrix = pdfContext->fGraphicsState.fMatrixTm;
-    pdfContext->fGraphicsState.fMatrixTlm = pdfContext->fGraphicsState.fMatrix;
-
-    SkTraceMatrix(pdfContext->fGraphicsState.fMatrix, "Total matrix");
-
-    canvas->setMatrix(pdfContext->fGraphicsState.fMatrix);
-
-    SkRect rm = bBox;
-    pdfContext->fGraphicsState.fMatrix.mapRect(&rm);
-
-    SkTraceRect(rm, "bbox mapped");
-
-    canvas->clipRect(bBox, SkRegion::kIntersect_Op, true);  // TODO(edisonn): AA from settings.
-
-    // TODO(edisonn): iterate smart on the stream even if it is compressed, tokenize it as we go.
-    // For this PdfContentsTokenizer needs to be extended.
-
-    PdfResult ret = kPartial_PdfResult;
-    SkPdfTokenizer tokenizer(skobj);
-    PdfMainLooper looper(NULL, &tokenizer, pdfContext, canvas);
-    looper.loop();
-
-    // TODO(edisonn): should we restore the variable stack at the same state?
-    // There could be operands left, that could be consumed by a parent tokenizer when we pop.
-    canvas->restore();
-    PdfOp_Q(pdfContext, canvas, NULL);
-    return ret;
-}
-
-
-// TODO(edisonn): faster, have the property on the SkPdfObject itself?
-std::set<const PdfObject*> gInRendering;
-
-class CheckRecursiveRendering {
-    const PdfObject& fObj;
-public:
-    CheckRecursiveRendering(const PdfObject& obj) : fObj(obj) {
-        gInRendering.insert(&obj);
-    }
-
-    ~CheckRecursiveRendering() {
-        //SkASSERT(fObj.fInRendering);
-        gInRendering.erase(&fObj);
-    }
-
-    static bool IsInRendering(const PdfObject& obj) {
-        return gInRendering.find(&obj) != gInRendering.end();
-    }
-};
-
-PdfResult doXObject(PdfContext* pdfContext, SkCanvas* canvas, const SkPdfObject& obj) {
-    if (CheckRecursiveRendering::IsInRendering(*obj.podofo())) {
-        // Oops, corrupt PDF!
-        return kIgnoreError_PdfResult;
-    }
-
-    CheckRecursiveRendering checkRecursion(*obj.podofo());
-
-    // TODO(edisonn): check type
-    SkPdfXObjectDictionary* skobj = NULL;
-    if (!PodofoMapper::map(obj, &skobj)) return kIgnoreError_PdfResult;
-
-    if (!skobj || !skobj->valid()) return kIgnoreError_PdfResult;
-
-    PdfResult ret = kIgnoreError_PdfResult;
-    switch (skobj->getType())
-    {
-        case kImageDictionary_SkPdfObjectType:
-            ret = doXObject_Image(pdfContext, canvas, skobj->asImageDictionary());
-            break;
-        case kType1FormDictionary_SkPdfObjectType:
-            ret = doXObject_Form(pdfContext, canvas, skobj->asType1FormDictionary());
-            break;
-        //case kObjectDictionaryXObjectPS_SkPdfObjectType:
-            //return doXObject_PS(skxobj.asPS());
-    }
-
-    delete skobj;
-    return ret;
-}
-
-PdfResult PdfOp_q(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fStateStack.push(pdfContext->fGraphicsState);
-    canvas->save();
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_Q(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fGraphicsState = pdfContext->fStateStack.top();
-    pdfContext->fStateStack.pop();
-    canvas->restore();
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_cm(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    double array[6];
-    for (int i = 0 ; i < 6 ; i++) {
-        array[5 - i] = pdfContext->fObjectStack.top()->asNumber()->value();
-        pdfContext->fObjectStack.pop();
-    }
-
-    // a b
-    // c d
-    // e f
-
-    // 0 1
-    // 2 3
-    // 4 5
-
-    // sx ky
-    // kx sy
-    // tx ty
-    SkMatrix matrix = SkMatrixFromPdfMatrix(array);
-
-    pdfContext->fGraphicsState.fMatrix.preConcat(matrix);
-
-#ifdef PDF_TRACE
-    printf("cm ");
-    for (int i = 0 ; i < 6 ; i++) {
-        printf("%f ", array[i]);
-    }
-    printf("\n");
-    SkTraceMatrix(pdfContext->fGraphicsState.fMatrix);
-#endif
-
-    return kOK_PdfResult;
-}
-
-//leading TL Set the text leading, Tl
-//, to leading, which is a number expressed in unscaled text
-//space units. Text leading is used only by the T*, ', and " operators. Initial value: 0.
-PdfResult PdfOp_TL(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    double ty = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
-
-    pdfContext->fGraphicsState.fTextLeading = ty;
-
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_Td(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    double ty = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
-    double tx = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
-
-    double array[6] = {1, 0, 0, 1, tx, ty};
-    SkMatrix matrix = SkMatrixFromPdfMatrix(array);
-
-    pdfContext->fGraphicsState.fMatrixTm.preConcat(matrix);
-    pdfContext->fGraphicsState.fMatrixTlm.preConcat(matrix);
-
-    return kPartial_PdfResult;
-}
-
-PdfResult PdfOp_TD(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    double ty = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
-    double tx = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
-
-    // TODO(edisonn): Create factory methods or constructors so podofo is hidden
-    PdfObject _ty(PdfVariant(-ty));
-    pdfContext->fObjectStack.push(new SkPdfNumber(&pdfContext->fPdfDoc->podofo(), &_ty));
-
-    PdfOp_TL(pdfContext, canvas, looper);
-
-    PdfObject vtx(PdfVariant(-(-tx)));  // TODO(edisonn): Hmm, the compiler thinks I have here a function pointer if we use (tx), but not -(-tx)
-    pdfContext->fObjectStack.push(new SkPdfNumber(&pdfContext->fPdfDoc->podofo(), &vtx));
-
-    PdfObject vty(PdfVariant(-(-ty)));
-    pdfContext->fObjectStack.push(new SkPdfNumber(&pdfContext->fPdfDoc->podofo(), &vty));
-
-    return PdfOp_Td(pdfContext, canvas, looper);
-}
-
-PdfResult PdfOp_Tm(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    double f = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
-    double e = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
-    double d = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
-    double c = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
-    double b = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
-    double a = pdfContext->fObjectStack.top()->asNumber()->value(); pdfContext->fObjectStack.pop();
-
-    double array[6];
-    array[0] = a;
-    array[1] = b;
-    array[2] = c;
-    array[3] = d;
-    array[4] = e;
-    array[5] = f;
-
-    SkMatrix matrix = SkMatrixFromPdfMatrix(array);
-    matrix.postConcat(pdfContext->fGraphicsState.fMatrix);
-
-    // TODO(edisonn): Text positioning.
-    pdfContext->fGraphicsState.fMatrixTm = matrix;
-    pdfContext->fGraphicsState.fMatrixTlm = matrix;;
-
-    return kPartial_PdfResult;
-}
-
-//— T* Move to the start of the next line. This operator has the same effect as the code
-//0 Tl Td
-//where Tl is the current leading parameter in the text state
-PdfResult PdfOp_T_star(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    PdfObject zero(PdfVariant(0.0));
-    PdfObject tl(PdfVariant(-(-pdfContext->fGraphicsState.fTextLeading)));
-
-    pdfContext->fObjectStack.push(new SkPdfNumber(&pdfContext->fPdfDoc->podofo(), &zero));
-    pdfContext->fObjectStack.push(new SkPdfNumber(&pdfContext->fPdfDoc->podofo(), &tl));
-    return PdfOp_Td(pdfContext, canvas, looper);
-}
-
-PdfResult PdfOp_m(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    if (pdfContext->fGraphicsState.fPathClosed) {
-        pdfContext->fGraphicsState.fPath.reset();
-        pdfContext->fGraphicsState.fPathClosed = false;
-    }
-
-    pdfContext->fGraphicsState.fCurPosY = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    pdfContext->fGraphicsState.fCurPosX = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-
-    pdfContext->fGraphicsState.fPath.moveTo(SkDoubleToScalar(pdfContext->fGraphicsState.fCurPosX),
-                                          SkDoubleToScalar(pdfContext->fGraphicsState.fCurPosY));
-
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_l(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    if (pdfContext->fGraphicsState.fPathClosed) {
-        pdfContext->fGraphicsState.fPath.reset();
-        pdfContext->fGraphicsState.fPathClosed = false;
-    }
-
-    pdfContext->fGraphicsState.fCurPosY = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    pdfContext->fGraphicsState.fCurPosX = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-
-    pdfContext->fGraphicsState.fPath.lineTo(SkDoubleToScalar(pdfContext->fGraphicsState.fCurPosX),
-                                          SkDoubleToScalar(pdfContext->fGraphicsState.fCurPosY));
-
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_c(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    if (pdfContext->fGraphicsState.fPathClosed) {
-        pdfContext->fGraphicsState.fPath.reset();
-        pdfContext->fGraphicsState.fPathClosed = false;
-    }
-
-    double y3 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    double x3 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    double y2 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    double x2 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    double y1 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    double x1 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-
-    pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToScalar(y1),
-                                            SkDoubleToScalar(x2), SkDoubleToScalar(y2),
-                                            SkDoubleToScalar(x3), SkDoubleToScalar(y3));
-
-    pdfContext->fGraphicsState.fCurPosX = x3;
-    pdfContext->fGraphicsState.fCurPosY = y3;
-
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_v(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    if (pdfContext->fGraphicsState.fPathClosed) {
-        pdfContext->fGraphicsState.fPath.reset();
-        pdfContext->fGraphicsState.fPathClosed = false;
-    }
-
-    double y3 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    double x3 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    double y2 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    double x2 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    double y1 = pdfContext->fGraphicsState.fCurPosY;
-    double x1 = pdfContext->fGraphicsState.fCurPosX;
-
-    pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToScalar(y1),
-                                            SkDoubleToScalar(x2), SkDoubleToScalar(y2),
-                                            SkDoubleToScalar(x3), SkDoubleToScalar(y3));
-
-    pdfContext->fGraphicsState.fCurPosX = x3;
-    pdfContext->fGraphicsState.fCurPosY = y3;
-
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_y(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    if (pdfContext->fGraphicsState.fPathClosed) {
-        pdfContext->fGraphicsState.fPath.reset();
-        pdfContext->fGraphicsState.fPathClosed = false;
-    }
-
-    double y3 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    double x3 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    double y2 = pdfContext->fGraphicsState.fCurPosY;
-    double x2 = pdfContext->fGraphicsState.fCurPosX;
-    double y1 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-    double x1 = pdfContext->fObjectStack.top()->asNumber()->value();    pdfContext->fObjectStack.pop();
-
-    pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToScalar(y1),
-                                            SkDoubleToScalar(x2), SkDoubleToScalar(y2),
-                                            SkDoubleToScalar(x3), SkDoubleToScalar(y3));
-
-    pdfContext->fGraphicsState.fCurPosX = x3;
-    pdfContext->fGraphicsState.fCurPosY = y3;
-
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_re(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    if (pdfContext->fGraphicsState.fPathClosed) {
-        pdfContext->fGraphicsState.fPath.reset();
-        pdfContext->fGraphicsState.fPathClosed = false;
-    }
-
-    double height = pdfContext->fObjectStack.top()->asNumber()->value();      pdfContext->fObjectStack.pop();
-    double width = pdfContext->fObjectStack.top()->asNumber()->value();       pdfContext->fObjectStack.pop();
-    double y = pdfContext->fObjectStack.top()->asNumber()->value();           pdfContext->fObjectStack.pop();
-    double x = pdfContext->fObjectStack.top()->asNumber()->value();           pdfContext->fObjectStack.pop();
-
-    pdfContext->fGraphicsState.fPath.addRect(SkDoubleToScalar(x), SkDoubleToScalar(y),
-                                           SkDoubleToScalar(x + width), SkDoubleToScalar(y + height));
-
-    pdfContext->fGraphicsState.fCurPosX = x;
-    pdfContext->fGraphicsState.fCurPosY = y + height;
-
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_h(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fGraphicsState.fPath.close();
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_fillAndStroke(PdfContext* pdfContext, SkCanvas* canvas, bool fill, bool stroke, bool close, bool evenOdd) {
-    SkPath path = pdfContext->fGraphicsState.fPath;
-
-    if (close) {
-        path.close();
-    }
-
-    canvas->setMatrix(pdfContext->fGraphicsState.fMatrix);
-
-    SkPaint paint;
-
-    SkPoint line[2];
-    if (fill && !stroke && path.isLine(line)) {
-        paint.setStyle(SkPaint::kStroke_Style);
-
-        pdfContext->fGraphicsState.applyGraphicsState(&paint, false);
-        paint.setStrokeWidth(SkDoubleToScalar(0));
-
-        canvas->drawPath(path, paint);
-    } else {
-        if (fill) {
-            paint.setStyle(SkPaint::kFill_Style);
-            if (evenOdd) {
-                path.setFillType(SkPath::kEvenOdd_FillType);
-            }
-
-            pdfContext->fGraphicsState.applyGraphicsState(&paint, false);
-
-            canvas->drawPath(path, paint);
-        }
-
-        if (stroke) {
-            paint.setStyle(SkPaint::kStroke_Style);
-
-            pdfContext->fGraphicsState.applyGraphicsState(&paint, true);
-
-            path.setFillType(SkPath::kWinding_FillType);  // reset it, just in case it messes up the stroke
-            canvas->drawPath(path, paint);
-        }
-    }
-
-    pdfContext->fGraphicsState.fPath.reset();
-    // todo zoom ... other stuff ?
-
-    if (pdfContext->fGraphicsState.fHasClipPathToApply) {
-#ifndef PDF_DEBUG_NO_CLIPING
-        canvas->clipPath(pdfContext->fGraphicsState.fClipPath, SkRegion::kIntersect_Op, true);
-#endif
-    }
-
-    //pdfContext->fGraphicsState.fClipPath.reset();
-    pdfContext->fGraphicsState.fHasClipPathToApply = false;
-
-    return kPartial_PdfResult;
-
-}
-
-PdfResult PdfOp_S(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_fillAndStroke(pdfContext, canvas, false, true, false, false);
-}
-
-PdfResult PdfOp_s(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_fillAndStroke(pdfContext, canvas, false, true, true, false);
-}
-
-PdfResult PdfOp_F(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, false);
-}
-
-PdfResult PdfOp_f(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, false);
-}
-
-PdfResult PdfOp_f_star(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, true);
-}
-
-PdfResult PdfOp_B(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_fillAndStroke(pdfContext, canvas, true, true, false, false);
-}
-
-PdfResult PdfOp_B_star(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_fillAndStroke(pdfContext, canvas, true, true, false, true);
-}
-
-PdfResult PdfOp_b(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_fillAndStroke(pdfContext, canvas, true, true, true, false);
-}
-
-PdfResult PdfOp_b_star(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_fillAndStroke(pdfContext, canvas, true, true, true, true);
-}
-
-PdfResult PdfOp_n(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    canvas->setMatrix(pdfContext->fGraphicsState.fMatrix);
-    if (pdfContext->fGraphicsState.fHasClipPathToApply) {
-#ifndef PDF_DEBUG_NO_CLIPING
-        canvas->clipPath(pdfContext->fGraphicsState.fClipPath, SkRegion::kIntersect_Op, true);
-#endif
-    }
-
-    //pdfContext->fGraphicsState.fClipPath.reset();
-    pdfContext->fGraphicsState.fHasClipPathToApply = false;
-
-    pdfContext->fGraphicsState.fPathClosed = true;
-
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_BT(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fGraphicsState.fTextBlock   = true;
-    pdfContext->fGraphicsState.fMatrixTm = pdfContext->fGraphicsState.fMatrix;
-    pdfContext->fGraphicsState.fMatrixTlm = pdfContext->fGraphicsState.fMatrix;
-
-    return kPartial_PdfResult;
-}
-
-PdfResult PdfOp_ET(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    if (!pdfContext->fGraphicsState.fTextBlock) {
-        return kIgnoreError_PdfResult;
-    }
-    // TODO(edisonn): anything else to be done once we are done with draw text? Like restore stack?
-    return kPartial_PdfResult;
-}
-
-//font size Tf Set the text font, Tf
-//, to font and the text font size, Tfs, to size. font is the name of a
-//font resource in the Fontsubdictionary of the current resource dictionary; size is
-//a number representing a scale factor. There is no initial value for either font or
-//size; they must be specified explicitly using Tf before any text is shown.
-PdfResult PdfOp_Tf(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fGraphicsState.fCurFontSize = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-    std::string fontName = pdfContext->fObjectStack.top()->asName()->value();                           pdfContext->fObjectStack.pop();
-
-#ifdef PDF_TRACE
-    printf("font name: %s\n", fontName.c_str());
-    std::string str;
-    pdfContext->fGraphicsState.fResources->podofo()->ToString(str);
-    printf("Print Tf Resources: %s\n", str.c_str());
-    pdfContext->fGraphicsState.fResources->Font()->podofo()->ToString(str);
-    printf("Print Tf Resources/Font: %s\n", str.c_str());
-#endif
-
-    SkPdfFontDictionary* fd = NULL;
-    if (pdfContext->fGraphicsState.fResources->Font()) {
-        SkPdfObject* objFont = pdfContext->fGraphicsState.fResources->Font()->get(fontName.c_str());
-        PodofoMapper::map(*objFont, &fd);
-
-#ifdef PDF_TRACE
-        objFont->podofo()->ToString(str);
-        printf("Print Font loaded: %s\n", str.c_str());
-        fd->podofo()->ToString(str);
-        printf("Print Font loaded and resolved and upgraded: %s\n", str.c_str());
-#endif
-
-    }
-
-    SkPdfFont* skfont = SkPdfFont::fontFromPdfDictionary(fd);
-
-    if (skfont) {
-        pdfContext->fGraphicsState.fSkFont = skfont;
-    }
-
-    return kPartial_PdfResult;
-}
-
-PdfResult PdfOp_Tj(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    if (!pdfContext->fGraphicsState.fTextBlock) {
-        // TODO(edisonn): try to recover and draw it any way?
-        return kIgnoreError_PdfResult;
-    }
-
-    PdfResult ret = DrawText(pdfContext,
-                             pdfContext->fObjectStack.top(),
-                             canvas);
-    pdfContext->fObjectStack.pop();
-
-    return ret;
-}
-
-PdfResult PdfOp_quote(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    if (!pdfContext->fGraphicsState.fTextBlock) {
-        // TODO(edisonn): try to recover and draw it any way?
-        return kIgnoreError_PdfResult;
-    }
-
-    PdfOp_T_star(pdfContext, canvas, looper);
-    // Do not pop, and push, just transfer the param to Tj
-    return PdfOp_Tj(pdfContext, canvas, looper);
-}
-
-PdfResult PdfOp_doublequote(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    if (!pdfContext->fGraphicsState.fTextBlock) {
-        // TODO(edisonn): try to recover and draw it any way?
-        return kIgnoreError_PdfResult;
-    }
-
-    SkPdfObject* str = pdfContext->fObjectStack.top();       pdfContext->fObjectStack.pop();
-    SkPdfObject* ac = pdfContext->fObjectStack.top();        pdfContext->fObjectStack.pop();
-    SkPdfObject* aw = pdfContext->fObjectStack.top();        pdfContext->fObjectStack.pop();
-
-    pdfContext->fObjectStack.push(aw);
-    PdfOp_Tw(pdfContext, canvas, looper);
-
-    pdfContext->fObjectStack.push(ac);
-    PdfOp_Tc(pdfContext, canvas, looper);
-
-    pdfContext->fObjectStack.push(str);
-    PdfOp_quote(pdfContext, canvas, looper);
-
-    return kPartial_PdfResult;
-}
-
-PdfResult PdfOp_TJ(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    if (!pdfContext->fGraphicsState.fTextBlock) {
-        // TODO(edisonn): try to recover and draw it any way?
-        return kIgnoreError_PdfResult;
-    }
-
-    SkPdfArray* array = pdfContext->fObjectStack.top()->asArray();
-    pdfContext->fObjectStack.pop();
-
-    for( int i=0; i<static_cast<int>(array->size()); i++ )
-    {
-        if( (*array)[i]->asString()) {
-            SkPdfObject* obj = (*array)[i];
-            DrawText(pdfContext,
-                     obj,
-                     canvas);
-        } else if ((*array)[i]->asInteger() || (*array)[i]->asNumber()) {
-            double dx = (*array)[i]->asNumber()->value();
-            SkMatrix matrix;
-            matrix.setAll(SkDoubleToScalar(1),
-                          SkDoubleToScalar(0),
-                          // TODO(edisonn): use writing mode, vertical/horizontal.
-                          SkDoubleToScalar(-dx),  // amount is substracted!!!
-                          SkDoubleToScalar(0),
-                          SkDoubleToScalar(1),
-                          SkDoubleToScalar(0),
-                          SkDoubleToScalar(0),
-                          SkDoubleToScalar(0),
-                          SkDoubleToScalar(1));
-
-            pdfContext->fGraphicsState.fMatrixTm.preConcat(matrix);
-        }
-    }
-    return kPartial_PdfResult;  // TODO(edisonn): Implement fully DrawText before returing OK.
-}
-
-PdfResult PdfOp_CS_cs(PdfContext* pdfContext, SkCanvas* canvas, PdfColorOperator* colorOperator) {
-    colorOperator->fColorSpace = pdfContext->fObjectStack.top()->asName()->value();    pdfContext->fObjectStack.pop();
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_CS(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_CS_cs(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
-}
-
-PdfResult PdfOp_cs(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_CS_cs(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
-}
-
-PdfResult PdfOp_SC_sc(PdfContext* pdfContext, SkCanvas* canvas, PdfColorOperator* colorOperator) {
-    double c[4];
-    pdf_int64 v[4];
-
-    int n = GetColorSpaceComponents(colorOperator->fColorSpace);
-
-    bool doubles = true;
-    if (colorOperator->fColorSpace == "Indexed") {
-        doubles = false;
-    }
-
-#ifdef PDF_TRACE
-    printf("color space = %s, N = %i\n", colorOperator->fColorSpace.c_str(), n);
-#endif
-
-    for (int i = n - 1; i >= 0 ; i--) {
-        if (doubles) {
-            c[i] = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-        } else {
-            v[i] = pdfContext->fObjectStack.top()->asInteger()->value();   pdfContext->fObjectStack.pop();
-        }
-    }
-
-    // TODO(edisonn): Now, set that color. Only DeviceRGB supported.
-    if (colorOperator->fColorSpace == "DeviceRGB") {
-        colorOperator->setRGBColor(SkColorSetRGB(255*c[0], 255*c[1], 255*c[2]));
-    }
-    return kPartial_PdfResult;
-}
-
-PdfResult PdfOp_SC(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_SC_sc(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
-}
-
-PdfResult PdfOp_sc(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_SC_sc(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
-}
-
-PdfResult PdfOp_SCN_scn(PdfContext* pdfContext, SkCanvas* canvas, PdfColorOperator* colorOperator) {
-    PdfString name;
-
-    if (pdfContext->fObjectStack.top()->asName()) {
-        pdfContext->fObjectStack.pop();
-    }
-
-    // TODO(edisonn): SCN supports more color spaces than SCN. Read and implement spec.
-    PdfOp_SC_sc(pdfContext, canvas, colorOperator);
-
-    return kPartial_PdfResult;
-}
-
-PdfResult PdfOp_SCN(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_SCN_scn(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
-}
-
-PdfResult PdfOp_scn(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_SCN_scn(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
-}
-
-PdfResult PdfOp_G_g(PdfContext* pdfContext, SkCanvas* canvas, PdfColorOperator* colorOperator) {
-    double gray = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-    return kNYI_PdfResult;
-}
-
-PdfResult PdfOp_G(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_G_g(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
-}
-
-PdfResult PdfOp_g(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_G_g(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
-}
-
-PdfResult PdfOp_RG_rg(PdfContext* pdfContext, SkCanvas* canvas, PdfColorOperator* colorOperator) {
-    double b = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-    double g = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-    double r = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-
-    colorOperator->fColorSpace = "DeviceRGB";
-    colorOperator->setRGBColor(SkColorSetRGB(255*r, 255*g, 255*b));
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_RG(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_RG_rg(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
-}
-
-PdfResult PdfOp_rg(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_RG_rg(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
-}
-
-PdfResult PdfOp_K_k(PdfContext* pdfContext, SkCanvas* canvas, PdfColorOperator* colorOperator) {
-    // TODO(edisonn): spec has some rules about overprint, implement them.
-    double k = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-    double y = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-    double m = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-    double c = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-
-    colorOperator->fColorSpace = "DeviceCMYK";
-    // TODO(edisonn): Set color.
-    return kNYI_PdfResult;
-}
-
-PdfResult PdfOp_K(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_K_k(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
-}
-
-PdfResult PdfOp_k(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return PdfOp_K_k(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
-}
-
-PdfResult PdfOp_W(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fGraphicsState.fClipPath = pdfContext->fGraphicsState.fPath;
-    pdfContext->fGraphicsState.fHasClipPathToApply = true;
-
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_W_star(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fGraphicsState.fClipPath = pdfContext->fGraphicsState.fPath;
-
-#ifdef PDF_TRACE
-    if (pdfContext->fGraphicsState.fClipPath.isRect(NULL)) {
-        printf("CLIP IS RECT\n");
-    }
-#endif
-
-    // TODO(edisonn): there seem to be a bug with clipPath of a rect with even odd.
-    pdfContext->fGraphicsState.fClipPath.setFillType(SkPath::kEvenOdd_FillType);
-    pdfContext->fGraphicsState.fHasClipPathToApply = true;
-
-    return kPartial_PdfResult;
-}
-
-PdfResult PdfOp_BX(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    *looper = new PdfCompatibilitySectionLooper();
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_EX(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-#ifdef ASSERT_BAD_PDF_OPS
-    SkASSERT(false);  // EX must be consumed by PdfCompatibilitySectionLooper, but let's
-                      // have the assert when testing good pdfs.
-#endif
-    return kIgnoreError_PdfResult;
-}
-
-PdfResult PdfOp_BI(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    *looper = new PdfInlineImageLooper();
-    return kOK_PdfResult;
-}
-
-PdfResult PdfOp_ID(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-#ifdef ASSERT_BAD_PDF_OPS
-    SkASSERT(false);  // must be processed in inline image looper, but let's
-                      // have the assert when testing good pdfs.
-#endif
-    return kIgnoreError_PdfResult;
-}
-
-PdfResult PdfOp_EI(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-#ifdef ASSERT_BAD_PDF_OPS
-    SkASSERT(false);  // must be processed in inline image looper, but let's
-                      // have the assert when testing good pdfs.
-#endif
-    return kIgnoreError_PdfResult;
-}
-
-//lineWidth w Set the line width in the graphics state (see “Line Width” on page 152).
-PdfResult PdfOp_w(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    double lineWidth = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-    pdfContext->fGraphicsState.fLineWidth = lineWidth;
-
-    return kOK_PdfResult;
-}
-
-//lineCap J Set the line cap style in the graphics state (see “Line Cap Style” on page 153).
-PdfResult PdfOp_J(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fObjectStack.pop();
-    //double lineCap = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//lineJoin j Set the line join style in the graphics state (see “Line Join Style” on page 153).
-PdfResult PdfOp_j(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fObjectStack.pop();
-    //double lineJoin = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//miterLimit M Set the miter limit in the graphics state (see “Miter Limit” on page 153).
-PdfResult PdfOp_M(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fObjectStack.pop();
-    //double miterLimit = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//dashArray dashPhase d Set the line dash pattern in the graphics state (see “Line Dash Pattern” on
-//page 155).
-PdfResult PdfOp_d(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fObjectStack.pop();
-    pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//intent ri (PDF 1.1) Set the color rendering intent in the graphics state (see “Rendering Intents” on page 197).
-PdfResult PdfOp_ri(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//flatness i Set the flatness tolerance in the graphics state (see Section 6.5.1, “Flatness
-//Tolerance”). flatness is a number in the range 0 to 100; a value of 0 speci-
-//fies the output device’s default flatness tolerance.
-PdfResult PdfOp_i(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//dictName gs (PDF 1.2) Set the specified parameters in the graphics state. dictName is
-//the name of a graphics state parameter dictionary in the ExtGState subdictionary of the current resource dictionary (see the next section).
-PdfResult PdfOp_gs(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    std::string name = pdfContext->fObjectStack.top()->asName()->value();    pdfContext->fObjectStack.pop();
-
-#ifdef PDF_TRACE
-    std::string str;
-#endif
-
-    //Next, get the ExtGState Dictionary from the Resource Dictionary:
-    const SkPdfDictionary* extGStateDictionary = pdfContext->fGraphicsState.fResources->ExtGState();
-
-    if (extGStateDictionary == NULL) {
-#ifdef PDF_TRACE
-        printf("ExtGState is NULL!\n");
-#endif
-        return kIgnoreError_PdfResult;
-    }
-
-    SkPdfObject* value = extGStateDictionary->get(name.c_str());
-
-#ifdef PDF_TRACE
-//    value->ToString(str);
-//    printf("gs object value: %s\n", str.c_str());
-#endif
-
-    SkPdfGraphicsStateDictionary* gs = NULL;
-    PodofoMapper::map(*value, &gs);
-
-    // TODO(edisonn): now load all those properties in graphic state.
-    if (gs == NULL) {
-        return kIgnoreError_PdfResult;
-    }
-
-    if (gs->has_CA()) {
-        pdfContext->fGraphicsState.fStroking.fOpacity = gs->CA();
-    }
-
-    if (gs->has_ca()) {
-        pdfContext->fGraphicsState.fNonStroking.fOpacity = gs->ca();
-    }
-
-    if (gs->has_LW()) {
-        pdfContext->fGraphicsState.fLineWidth = gs->LW();
-    }
-
-
-
-    return kNYI_PdfResult;
-}
-
-//charSpace Tc Set the character spacing, Tc
-//, to charSpace, which is a number expressed in unscaled text space units. Character spacing is used by the Tj, TJ, and ' operators.
-//Initial value: 0.
-PdfResult PdfOp_Tc(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    double charSpace = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-    pdfContext->fGraphicsState.fCharSpace = charSpace;
-
-    return kOK_PdfResult;
-}
-
-//wordSpace Tw Set the word spacing, T
-//w
-//, to wordSpace, which is a number expressed in unscaled
-//text space units. Word spacing is used by the Tj, TJ, and ' operators. Initial
-//value: 0.
-PdfResult PdfOp_Tw(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    double wordSpace = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-    pdfContext->fGraphicsState.fWordSpace = wordSpace;
-
-    return kOK_PdfResult;
-}
-
-//scale Tz Set the horizontal scaling, Th
-//, to (scale ˜ 100). scale is a number specifying the
-//percentage of the normal width. Initial value: 100 (normal width).
-PdfResult PdfOp_Tz(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    double scale = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//render Tr Set the text rendering mode, T
-//mode, to render, which is an integer. Initial value: 0.
-PdfResult PdfOp_Tr(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    double render = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-//rise Ts Set the text rise, Trise, to rise, which is a number expressed in unscaled text space
-//units. Initial value: 0.
-PdfResult PdfOp_Ts(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    double rise = pdfContext->fObjectStack.top()->asNumber()->value();     pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//wx wy d0
-PdfResult PdfOp_d0(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fObjectStack.pop();
-    pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//wx wy llx lly urx ury d1
-PdfResult PdfOp_d1(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fObjectStack.pop();
-    pdfContext->fObjectStack.pop();
-    pdfContext->fObjectStack.pop();
-    pdfContext->fObjectStack.pop();
-    pdfContext->fObjectStack.pop();
-    pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//name sh
-PdfResult PdfOp_sh(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//name Do
-PdfResult PdfOp_Do(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    std::string name = pdfContext->fObjectStack.top()->asName()->value();    pdfContext->fObjectStack.pop();
-
-    SkPdfDictionary* xObject =  pdfContext->fGraphicsState.fResources->XObject();
-
-    if (xObject == NULL) {
-#ifdef PDF_TRACE
-        printf("XObject is NULL!\n");
-#endif
-        return kIgnoreError_PdfResult;
-    }
-
-    SkPdfObject* value = xObject->get(name.c_str());
-
-#ifdef PDF_TRACE
-//    value->ToString(str);
-//    printf("Do object value: %s\n", str.c_str());
-#endif
-
-    return doXObject(pdfContext, canvas, *value);
-}
-
-//tag MP Designate a marked-content point. tag is a name object indicating the role or
-//significance of the point.
-PdfResult PdfOp_MP(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//tag properties DP Designate a marked-content point with an associated property list. tag is a
-//name object indicating the role or significance of the point; properties is
-//either an inline dictionary containing the property list or a name object
-//associated with it in the Properties subdictionary of the current resource
-//dictionary (see Section 9.5.1, “Property Lists”).
-PdfResult PdfOp_DP(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fObjectStack.pop();
-    pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//tag BMC Begin a marked-content sequence terminated by a balancing EMC operator.
-//tag is a name object indicating the role or significance of the sequence.
-PdfResult PdfOp_BMC(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//tag properties BDC Begin a marked-content sequence with an associated property list, terminated
-//by a balancing EMCoperator. tag is a name object indicating the role or significance of the sequence; propertiesis either an inline dictionary containing the
-//property list or a name object associated with it in the Properties subdictionary of the current resource dictionary (see Section 9.5.1, “Property Lists”).
-PdfResult PdfOp_BDC(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    pdfContext->fObjectStack.pop();
-    pdfContext->fObjectStack.pop();
-
-    return kNYI_PdfResult;
-}
-
-//— EMC End a marked-content sequence begun by a BMC or BDC operator.
-PdfResult PdfOp_EMC(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
-    return kNYI_PdfResult;
-}
-
-void initPdfOperatorRenderes() {
-    static bool gInitialized = false;
-    if (gInitialized) {
-        return;
-    }
-
-    gPdfOps["q"] =      PdfOp_q;
-    gPdfOps["Q"] =      PdfOp_Q;
-    gPdfOps["cm"] =     PdfOp_cm;
-
-    gPdfOps["TD"] =     PdfOp_TD;
-    gPdfOps["Td"] =     PdfOp_Td;
-    gPdfOps["Tm"] =     PdfOp_Tm;
-    gPdfOps["T*"] =     PdfOp_T_star;
-
-    gPdfOps["m"] =      PdfOp_m;
-    gPdfOps["l"] =      PdfOp_l;
-    gPdfOps["c"] =      PdfOp_c;
-    gPdfOps["v"] =      PdfOp_v;
-    gPdfOps["y"] =      PdfOp_y;
-    gPdfOps["h"] =      PdfOp_h;
-    gPdfOps["re"] =     PdfOp_re;
-
-    gPdfOps["S"] =      PdfOp_S;
-    gPdfOps["s"] =      PdfOp_s;
-    gPdfOps["f"] =      PdfOp_f;
-    gPdfOps["F"] =      PdfOp_F;
-    gPdfOps["f*"] =     PdfOp_f_star;
-    gPdfOps["B"] =      PdfOp_B;
-    gPdfOps["B*"] =     PdfOp_B_star;
-    gPdfOps["b"] =      PdfOp_b;
-    gPdfOps["b*"] =     PdfOp_b_star;
-    gPdfOps["n"] =      PdfOp_n;
-
-    gPdfOps["BT"] =     PdfOp_BT;
-    gPdfOps["ET"] =     PdfOp_ET;
-
-    gPdfOps["Tj"] =     PdfOp_Tj;
-    gPdfOps["'"] =      PdfOp_quote;
-    gPdfOps["\""] =     PdfOp_doublequote;
-    gPdfOps["TJ"] =     PdfOp_TJ;
-
-    gPdfOps["CS"] =     PdfOp_CS;
-    gPdfOps["cs"] =     PdfOp_cs;
-    gPdfOps["SC"] =     PdfOp_SC;
-    gPdfOps["SCN"] =    PdfOp_SCN;
-    gPdfOps["sc"] =     PdfOp_sc;
-    gPdfOps["scn"] =    PdfOp_scn;
-    gPdfOps["G"] =      PdfOp_G;
-    gPdfOps["g"] =      PdfOp_g;
-    gPdfOps["RG"] =     PdfOp_RG;
-    gPdfOps["rg"] =     PdfOp_rg;
-    gPdfOps["K"] =      PdfOp_K;
-    gPdfOps["k"] =      PdfOp_k;
-
-    gPdfOps["W"] =      PdfOp_W;
-    gPdfOps["W*"] =     PdfOp_W_star;
-
-    gPdfOps["BX"] =     PdfOp_BX;
-    gPdfOps["EX"] =     PdfOp_EX;
-
-    gPdfOps["BI"] =     PdfOp_BI;
-    gPdfOps["ID"] =     PdfOp_ID;
-    gPdfOps["EI"] =     PdfOp_EI;
-
-    gPdfOps["w"] =      PdfOp_w;
-    gPdfOps["J"] =      PdfOp_J;
-    gPdfOps["j"] =      PdfOp_j;
-    gPdfOps["M"] =      PdfOp_M;
-    gPdfOps["d"] =      PdfOp_d;
-    gPdfOps["ri"] =     PdfOp_ri;
-    gPdfOps["i"] =      PdfOp_i;
-    gPdfOps["gs"] =     PdfOp_gs;
-
-    gPdfOps["Tc"] =     PdfOp_Tc;
-    gPdfOps["Tw"] =     PdfOp_Tw;
-    gPdfOps["Tz"] =     PdfOp_Tz;
-    gPdfOps["TL"] =     PdfOp_TL;
-    gPdfOps["Tf"] =     PdfOp_Tf;
-    gPdfOps["Tr"] =     PdfOp_Tr;
-    gPdfOps["Ts"] =     PdfOp_Ts;
-
-    gPdfOps["d0"] =     PdfOp_d0;
-    gPdfOps["d1"] =     PdfOp_d1;
-
-    gPdfOps["sh"] =     PdfOp_sh;
-
-    gPdfOps["Do"] =     PdfOp_Do;
-
-    gPdfOps["MP"] =     PdfOp_MP;
-    gPdfOps["DP"] =     PdfOp_DP;
-    gPdfOps["BMC"] =    PdfOp_BMC;
-    gPdfOps["BDC"] =    PdfOp_BDC;
-    gPdfOps["EMC"] =    PdfOp_EMC;
-
-    gInitialized = true;
-}
-
-void reportPdfRenderStats() {
-    std::map<std::string, int>::iterator iter;
-
-    for (int i = 0 ; i < kCount_PdfResult; i++) {
-        for (iter = gRenderStats[i].begin(); iter != gRenderStats[i].end(); ++iter) {
-            printf("%s: %s -> count %i\n", gRenderStatsNames[i], iter->first.c_str(), iter->second);
-        }
-    }
-}
-
-PdfResult PdfMainLooper::consumeToken(PdfToken& token) {
-    if (token.fType == kKeyword_TokenType)
-    {
-        // TODO(edisonn): log trace flag (verbose, error, info, warning, ...)
-        PdfOperatorRenderer pdfOperatorRenderer = gPdfOps[token.fKeyword];
-        if (pdfOperatorRenderer) {
-            // caller, main work is done by pdfOperatorRenderer(...)
-            PdfTokenLooper* childLooper = NULL;
-            gRenderStats[pdfOperatorRenderer(fPdfContext, fCanvas, &childLooper)][token.fKeyword]++;
-
-            if (childLooper) {
-                childLooper->setUp(this);
-                childLooper->loop();
-                delete childLooper;
-            }
-        } else {
-            gRenderStats[kUnsupported_PdfResult][token.fKeyword]++;
-        }
-    }
-    else if (token.fType == kObject_TokenType)
-    {
-        fPdfContext->fObjectStack.push( token.fObject );
-    }
-    else if ( token.fType == kImageData_TokenType) {
-        // TODO(edisonn): implement inline image.
-    }
-    else {
-        return kIgnoreError_PdfResult;
-    }
-    return kOK_PdfResult;
-}
-
-void PdfMainLooper::loop() {
-    PdfToken token;
-    while (readToken(fTokenizer, &token)) {
-        consumeToken(token);
-    }
-}
-
-PdfResult PdfInlineImageLooper::consumeToken(PdfToken& token) {
-    //pdfContext.fInlineImage.fKeyValuePairs[key] = value;
-    return kNYI_PdfResult;
-}
-
-void PdfInlineImageLooper::loop() {
-    PdfToken token;
-    while (readToken(fTokenizer, &token)) {
-        if (token.fType == kKeyword_TokenType && strcmp(token.fKeyword, "BX") == 0) {
-            PdfTokenLooper* looper = new PdfCompatibilitySectionLooper();
-            looper->setUp(this);
-            looper->loop();
-        } else {
-            if (token.fType == kKeyword_TokenType && strcmp(token.fKeyword, "EI") == 0) {
-                done();
-                return;
-            }
-
-            consumeToken(token);
-        }
-    }
-    // TODO(edisonn): report error/warning, EOF without EI.
-}
-
-PdfResult PdfInlineImageLooper::done() {
-
-    // TODO(edisonn): long to short names
-    // TODO(edisonn): set properties in a map
-    // TODO(edisonn): extract bitmap stream, check if PoDoFo has public utilities to uncompress
-    // the stream.
-
-    SkBitmap bitmap;
-    setup_bitmap(&bitmap, 50, 50, SK_ColorRED);
-
-    // TODO(edisonn): matrix use.
-    // Draw dummy red square, to show the prezence of the inline image.
-    fCanvas->drawBitmap(bitmap,
-                       SkDoubleToScalar(0),
-                       SkDoubleToScalar(0),
-                       NULL);
-    return kNYI_PdfResult;
-}
-
-PdfResult PdfCompatibilitySectionLooper::consumeToken(PdfToken& token) {
-    return fParent->consumeToken(token);
-}
-
-void PdfCompatibilitySectionLooper::loop() {
-    // TODO(edisonn): save stacks position, or create a new stack?
-    // TODO(edisonn): what happens if we pop out more variables then when we started?
-    // restore them? fail? We could create a new operands stack for every new BX/EX section,
-    // pop-ing too much will not affect outside the section.
-    PdfToken token;
-    while (readToken(fTokenizer, &token)) {
-        if (token.fType == kKeyword_TokenType && strcmp(token.fKeyword, "BX") == 0) {
-            PdfTokenLooper* looper = new PdfCompatibilitySectionLooper();
-            looper->setUp(this);
-            looper->loop();
-            delete looper;
-        } else {
-            if (token.fType == kKeyword_TokenType && strcmp(token.fKeyword, "EX") == 0) break;
-            fParent->consumeToken(token);
-        }
-    }
-    // TODO(edisonn): restore stack.
-}
-
-// TODO(edisonn): fix PoDoFo load ~/crashing/Shading.pdf
-// TODO(edisonn): Add API for Forms viewing and editing
-// e.g. SkBitmap getPage(int page);
-//      int formsCount();
-//      SkForm getForm(int formID); // SkForm(SkRect, .. other data)
-// TODO (edisonn): Add intend when loading pdf, for example: for viewing, parsing all content, ...
-// if we load the first page, and we zoom to fit to screen horizontally, then load only those
-// resources needed, so the preview is fast.
-// TODO (edisonn): hide parser/tokenizer behind and interface and a query language, and resolve
-// references automatically.
-class SkPdfViewer : public SkRefCnt {
-public:
-
-  bool load(const SkString inputFileName, SkPicture* out) {
-
-    initPdfOperatorRenderes();
-
-    try
-    {
-        std::cout << "Init: " << inputFileName.c_str() << std::endl;
-
-        SkPdfDoc doc(inputFileName.c_str());
-        if( !doc.pages() )
-        {
-            std::cout << "ERROR: Empty Document" << inputFileName.c_str() << std::endl;
-            return false;
-        } else {
-
-            for (int pn = 0; pn < doc.pages(); ++pn) {
-                SkPdfPageObjectDictionary* page = doc.page(pn);
-
-                // TODO(edisonn): implement inheritance properties as per PDF spec
-                //SkRect rect = page->MediaBox();
-                SkRect rect = doc.MediaBox(pn);
-
-#ifdef PDF_TRACE
-                printf("Page Width: %f, Page Height: %f\n", SkScalarToDouble(rect.width()), SkScalarToDouble(rect.height()));
-#endif
-
-                // TODO(edisonn): page->GetCropBox(), page->GetTrimBox() ... how to use?
-
-                SkBitmap bitmap;
-#ifdef PDF_DEBUG_3X
-                setup_bitmap(&bitmap, 3 * (int)SkScalarToDouble(rect.width()), 3 * (int)SkScalarToDouble(rect.height()));
-#else
-                setup_bitmap(&bitmap, (int)SkScalarToDouble(rect.width()), (int)SkScalarToDouble(rect.height()));
-#endif
-                SkAutoTUnref<SkDevice> device(SkNEW_ARGS(SkDevice, (bitmap)));
-                SkCanvas canvas(device);
-
-                SkPdfTokenizer* tokenizer = doc.tokenizerOfPage(pn);
-
-                PdfContext pdfContext(&doc);
-                pdfContext.fOriginalMatrix = SkMatrix::I();
-                pdfContext.fGraphicsState.fResources = NULL;
-                PodofoMapper::map(*page->Resources(), &pdfContext.fGraphicsState.fResources);
-
-                gPdfContext = &pdfContext;
-                gDumpBitmap = &bitmap;
-                gDumpCanvas = &canvas;
-
-
-                // TODO(edisonn): get matrix stuff right.
-                // TODO(edisonn): add DPI/scale/zoom.
-                SkScalar z = SkIntToScalar(0);
-                SkScalar w = rect.width();
-                SkScalar h = rect.height();
-
-                SkPoint pdfSpace[4] = {SkPoint::Make(z, z), SkPoint::Make(w, z), SkPoint::Make(w, h), SkPoint::Make(z, h)};
-//                SkPoint skiaSpace[4] = {SkPoint::Make(z, h), SkPoint::Make(w, h), SkPoint::Make(w, z), SkPoint::Make(z, z)};
-
-                // TODO(edisonn): add flag for this app to create sourunding buffer zone
-                // TODO(edisonn): add flagg for no clipping.
-                // Use larger image to make sure we do not draw anything outside of page
-                // could be used in tests.
-
-#ifdef PDF_DEBUG_3X
-                SkPoint skiaSpace[4] = {SkPoint::Make(w+z, h+h), SkPoint::Make(w+w, h+h), SkPoint::Make(w+w, h+z), SkPoint::Make(w+z, h+z)};
-#else
-                SkPoint skiaSpace[4] = {SkPoint::Make(z, h), SkPoint::Make(w, h), SkPoint::Make(w, z), SkPoint::Make(z, z)};
-#endif
-                //SkPoint pdfSpace[2] = {SkPoint::Make(z, z), SkPoint::Make(w, h)};
-                //SkPoint skiaSpace[2] = {SkPoint::Make(w, z), SkPoint::Make(z, h)};
-
-                //SkPoint pdfSpace[2] = {SkPoint::Make(z, z), SkPoint::Make(z, h)};
-                //SkPoint skiaSpace[2] = {SkPoint::Make(z, h), SkPoint::Make(z, z)};
-
-                //SkPoint pdfSpace[3] = {SkPoint::Make(z, z), SkPoint::Make(z, h), SkPoint::Make(w, h)};
-                //SkPoint skiaSpace[3] = {SkPoint::Make(z, h), SkPoint::Make(z, z), SkPoint::Make(w, 0)};
-
-                SkAssertResult(pdfContext.fOriginalMatrix.setPolyToPoly(pdfSpace, skiaSpace, 4));
-                SkTraceMatrix(pdfContext.fOriginalMatrix, "Original matrix");
-
-
-                pdfContext.fGraphicsState.fMatrix = pdfContext.fOriginalMatrix;
-                pdfContext.fGraphicsState.fMatrixTm = pdfContext.fGraphicsState.fMatrix;
-                pdfContext.fGraphicsState.fMatrixTlm = pdfContext.fGraphicsState.fMatrix;
-
-                canvas.setMatrix(pdfContext.fOriginalMatrix);
-
-#ifndef PDF_DEBUG_NO_PAGE_CLIPING
-                canvas.clipRect(SkRect::MakeXYWH(z, z, w, h), SkRegion::kIntersect_Op, true);
-#endif
-
-                PdfMainLooper looper(NULL, tokenizer, &pdfContext, &canvas);
-                looper.loop();
-
-                delete tokenizer;
-
-                canvas.flush();
-
-                SkString out;
-                out.appendf("%s-%i.png", inputFileName.c_str(), pn);
-                SkImageEncoder::EncodeFile(out.c_str(), bitmap, SkImageEncoder::kPNG_Type, 100);
-            }
-            return true;
-        }
-    }
-    catch( PdfError & e )
-    {
-        std::cout << "ERROR: PDF can't be parsed!" << inputFileName.c_str() << std::endl;
-        return false;
-    }
-
-    return true;
-  }
-  bool write(void*) const { return false; }
-};
-
-
-
 /**
  * Given list of directories and files to use as input, expects to find .pdf
  * files and it will convert them to .png files writing them in the same directory
diff --git a/experimental/PdfViewer/spec2def.py b/experimental/PdfViewer/spec2def.py
index 6bebd87..dc78223 100644
--- a/experimental/PdfViewer/spec2def.py
+++ b/experimental/PdfViewer/spec2def.py
@@ -621,7 +621,7 @@
 
   print 'def addDictionaryTypesTo(knowTypes):'  
   for e in tableToClassName:
-    print('  knowTypes[\'' + tableToClassName[e][0] + '\'] = [\'SkPdf' + tableToClassName[e][0] + '*\', \'DictionaryFromDictionary2\', datatypes.CppNull(), \'ret->podofo()->GetDataType() == ePdfDataType_Dictionary\']')
+    print('  knowTypes[\'' + tableToClassName[e][0] + '\'] = [\'SkPdf' + tableToClassName[e][0] + '*\', \'' + tableToClassName[e][0] + 'FromDictionary\', datatypes.CppNull(), \'ret->podofo()->GetDataType() == ePdfDataType_Dictionary\']')
   print
   print
 
diff --git a/gyp/pdfviewer.gyp b/gyp/pdfviewer.gyp
index b8e605f..967002c 100644
--- a/gyp/pdfviewer.gyp
+++ b/gyp/pdfviewer.gyp
@@ -12,15 +12,19 @@
   ],
   'targets': [
     {
-      'target_name': 'pdfviewer',
-      'type': 'executable',
+      'target_name': 'libpdfviewer',
+      'type': 'static_library',
       'cflags': ['-fexceptions'],
       'cflags_cc': ['-fexceptions'],
       'cflags!': [ '-fno-exceptions' ],
       'cflags_cc!': [ '-fno-exceptions' ],
       'sources': [
-        '../experimental/PdfViewer/pdf_viewer_main.cpp',
-        #'../experimental/PdfViewer/SkPdfFont.cpp',
+        '../experimental/PdfViewer/SkPdfBasics.cpp',
+        '../experimental/PdfViewer/SkPdfFont.cpp',
+        '../experimental/PdfViewer/SkPdfParser.cpp',
+        '../experimental/PdfViewer/SkPdfUtils.cpp',
+        '../experimental/PdfViewer/autogen/SkPdfPodofoMapper_autogen.cpp',
+        '../experimental/PdfViewer/autogen/SkPdfHeaders_autogen.cpp',
       ],
       'include_dirs': [
         '../third_party/externals/podofo/src/base',
@@ -47,21 +51,30 @@
         'BUILDING_PODOFO',
       ],
     },
-  ],
-  'conditions': [
-    ['skia_os == "win"',
-      {
-        'targets': [
-          {
-            'target_name': 'win_lcid',
-            'type': 'executable',
-            'sources': [
-              '../tools/win_lcid.cpp',
-            ],
-          },
-        ],
-      },
-    ],
+    {
+      'target_name': 'pdfviewer',
+      'type': 'executable',
+      'cflags': ['-fexceptions'],
+      'cflags_cc': ['-fexceptions'],
+      'cflags!': [ '-fno-exceptions' ],
+      'cflags_cc!': [ '-fno-exceptions' ],
+      'sources': [
+        '../experimental/PdfViewer/pdf_viewer_main.cpp',
+      ],
+      'include_dirs': [
+        '../third_party/externals/podofo/src/base',
+        '../third_party/externals/podofo/src',
+        '../third_party/externals/podofo',
+        '../tools',
+        '../experimental/PdfViewer',
+        '../experimental/PdfViewer/autogen',
+      ],
+      'dependencies': [
+        'core.gyp:core',
+        'images.gyp:images',
+        'libpdfviewer',
+      ],
+    },
   ],
 }