| Index: experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.h
 | 
| ===================================================================
 | 
| --- experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.h	(revision 10543)
 | 
| +++ experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.h	(working copy)
 | 
| @@ -12,7 +12,10 @@
 | 
|  
 | 
|  #include "SkPdfNYI.h"
 | 
|  #include "SkPdfConfig.h"
 | 
| +#include "SkPdfUtils.h"
 | 
|  
 | 
| +#include "SkPdfNativeTokenizer.h"
 | 
| +
 | 
|  class SkPdfDictionary;
 | 
|  class SkPdfStream;
 | 
|  class SkPdfAllocator;
 | 
| @@ -25,7 +28,7 @@
 | 
|  #define kUnfilteredStreamBit 1
 | 
|  #define kOwnedStreamBit 2
 | 
|  
 | 
| -class SkPdfObject {
 | 
| +class SkPdfNativeObject {
 | 
|   public:
 | 
|       enum ObjectType {
 | 
|           kInvalid_PdfObjectType,
 | 
| @@ -78,10 +81,10 @@
 | 
|          NotOwnedString fStr;
 | 
|  
 | 
|          // TODO(edisonn): make sure the foorprint of fArray and fMap is small, otherwise, use pointers, or classes with up to 8 bytes in footprint
 | 
| -        SkTDArray<SkPdfObject*>* fArray;
 | 
| +        SkTDArray<SkPdfNativeObject*>* fArray;
 | 
|          Reference fRef;
 | 
|      };
 | 
| -    SkTDict<SkPdfObject*>* fMap;
 | 
| +    SkTDict<SkPdfNativeObject*>* fMap;
 | 
|  
 | 
|      // TODO(edisonn): rename data with cache
 | 
|      void* fData;
 | 
| @@ -90,7 +93,7 @@
 | 
|  
 | 
|  public:
 | 
|  
 | 
| -    SkPdfObject() : fObjectType(kInvalid_PdfObjectType), fMap(NULL), fData(NULL), fDataType(kEmpty_Data) {}
 | 
| +    SkPdfNativeObject() : fObjectType(kInvalid_PdfObjectType), fMap(NULL), fData(NULL), fDataType(kEmpty_Data) {}
 | 
|  
 | 
|  
 | 
|      inline bool hasData(DataType type) {
 | 
| @@ -109,7 +112,7 @@
 | 
|  
 | 
|      void releaseData();
 | 
|  
 | 
| -//    ~SkPdfObject() {
 | 
| +//    ~SkPdfNativeObject() {
 | 
|  //        //reset();  must be called manually!
 | 
|  //    }
 | 
|  
 | 
| @@ -190,49 +193,49 @@
 | 
|          return nyi;
 | 
|      }
 | 
|  
 | 
| -    static void makeBoolean(bool value, SkPdfObject* obj) {
 | 
| +    static void makeBoolean(bool value, SkPdfNativeObject* obj) {
 | 
|          SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
 | 
|  
 | 
|          obj->fObjectType = kBoolean_PdfObjectType;
 | 
|          obj->fBooleanValue = value;
 | 
|      }
 | 
|  
 | 
| -    static SkPdfObject makeBoolean(bool value) {
 | 
| -        SkPdfObject obj;
 | 
| +    static SkPdfNativeObject makeBoolean(bool value) {
 | 
| +        SkPdfNativeObject obj;
 | 
|          obj.fObjectType = kBoolean_PdfObjectType;
 | 
|          obj.fBooleanValue = value;
 | 
|          return obj;
 | 
|      }
 | 
|  
 | 
| -    static void makeInteger(int64_t value, SkPdfObject* obj) {
 | 
| +    static void makeInteger(int64_t value, SkPdfNativeObject* obj) {
 | 
|          SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
 | 
|  
 | 
|          obj->fObjectType = kInteger_PdfObjectType;
 | 
|          obj->fIntegerValue = value;
 | 
|      }
 | 
|  
 | 
| -    static void makeReal(double value, SkPdfObject* obj) {
 | 
| +    static void makeReal(double value, SkPdfNativeObject* obj) {
 | 
|          SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
 | 
|  
 | 
|          obj->fObjectType = kReal_PdfObjectType;
 | 
|          obj->fRealValue = value;
 | 
|      }
 | 
|  
 | 
| -    static void makeNull(SkPdfObject* obj) {
 | 
| +    static void makeNull(SkPdfNativeObject* obj) {
 | 
|          SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
 | 
|  
 | 
|          obj->fObjectType = kNull_PdfObjectType;
 | 
|      }
 | 
|  
 | 
| -    static SkPdfObject makeNull() {
 | 
| -        SkPdfObject obj;
 | 
| +    static SkPdfNativeObject makeNull() {
 | 
| +        SkPdfNativeObject obj;
 | 
|          obj.fObjectType = kNull_PdfObjectType;
 | 
|          return obj;
 | 
|      }
 | 
|  
 | 
| -    static SkPdfObject kNull;
 | 
| +    static SkPdfNativeObject kNull;
 | 
|  
 | 
| -    static void makeNumeric(const unsigned char* start, const unsigned char* end, SkPdfObject* obj) {
 | 
| +    static void makeNumeric(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) {
 | 
|          SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
 | 
|  
 | 
|          // TODO(edisonn): NYI properly
 | 
| @@ -252,7 +255,7 @@
 | 
|          }
 | 
|      }
 | 
|  
 | 
| -    static void makeReference(unsigned int id, unsigned int gen, SkPdfObject* obj) {
 | 
| +    static void makeReference(unsigned int id, unsigned int gen, SkPdfNativeObject* obj) {
 | 
|          SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
 | 
|  
 | 
|          obj->fObjectType = kReference_PdfObjectType;
 | 
| @@ -261,69 +264,69 @@
 | 
|      }
 | 
|  
 | 
|  
 | 
| -    static void makeString(const unsigned char* start, SkPdfObject* obj) {
 | 
| +    static void makeString(const unsigned char* start, SkPdfNativeObject* obj) {
 | 
|          makeStringCore(start, strlen((const char*)start), obj, kString_PdfObjectType);
 | 
|      }
 | 
|  
 | 
| -    static void makeString(const unsigned char* start, const unsigned char* end, SkPdfObject* obj) {
 | 
| +    static void makeString(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) {
 | 
|          makeStringCore(start, end - start, obj, kString_PdfObjectType);
 | 
|      }
 | 
|  
 | 
| -    static void makeString(const unsigned char* start, size_t bytes, SkPdfObject* obj) {
 | 
| +    static void makeString(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj) {
 | 
|          makeStringCore(start, bytes, obj, kString_PdfObjectType);
 | 
|      }
 | 
|  
 | 
|  
 | 
| -    static void makeHexString(const unsigned char* start, SkPdfObject* obj) {
 | 
| +    static void makeHexString(const unsigned char* start, SkPdfNativeObject* obj) {
 | 
|          makeStringCore(start, strlen((const char*)start), obj, kHexString_PdfObjectType);
 | 
|      }
 | 
|  
 | 
| -    static void makeHexString(const unsigned char* start, const unsigned char* end, SkPdfObject* obj) {
 | 
| +    static void makeHexString(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) {
 | 
|          makeStringCore(start, end - start, obj, kHexString_PdfObjectType);
 | 
|      }
 | 
|  
 | 
| -    static void makeHexString(const unsigned char* start, size_t bytes, SkPdfObject* obj) {
 | 
| +    static void makeHexString(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj) {
 | 
|          makeStringCore(start, bytes, obj, kHexString_PdfObjectType);
 | 
|      }
 | 
|  
 | 
|  
 | 
| -    static void makeName(const unsigned char* start, SkPdfObject* obj) {
 | 
| +    static void makeName(const unsigned char* start, SkPdfNativeObject* obj) {
 | 
|          makeStringCore(start, strlen((const char*)start), obj, kName_PdfObjectType);
 | 
|      }
 | 
|  
 | 
| -    static void makeName(const unsigned char* start, const unsigned char* end, SkPdfObject* obj) {
 | 
| +    static void makeName(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) {
 | 
|          makeStringCore(start, end - start, obj, kName_PdfObjectType);
 | 
|      }
 | 
|  
 | 
| -    static void makeName(const unsigned char* start, size_t bytes, SkPdfObject* obj) {
 | 
| +    static void makeName(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj) {
 | 
|          makeStringCore(start, bytes, obj, kName_PdfObjectType);
 | 
|      }
 | 
|  
 | 
|  
 | 
| -    static void makeKeyword(const unsigned char* start, SkPdfObject* obj) {
 | 
| +    static void makeKeyword(const unsigned char* start, SkPdfNativeObject* obj) {
 | 
|          makeStringCore(start, strlen((const char*)start), obj, kKeyword_PdfObjectType);
 | 
|      }
 | 
|  
 | 
| -    static void makeKeyword(const unsigned char* start, const unsigned char* end, SkPdfObject* obj) {
 | 
| +    static void makeKeyword(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) {
 | 
|          makeStringCore(start, end - start, obj, kKeyword_PdfObjectType);
 | 
|      }
 | 
|  
 | 
| -    static void makeKeyword(const unsigned char* start, size_t bytes, SkPdfObject* obj) {
 | 
| +    static void makeKeyword(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj) {
 | 
|          makeStringCore(start, bytes, obj, kKeyword_PdfObjectType);
 | 
|      }
 | 
|  
 | 
|  
 | 
|  
 | 
|      // TODO(edisonn): make the functions to return SkPdfArray, move these functions in SkPdfArray
 | 
| -    static void makeEmptyArray(SkPdfObject* obj) {
 | 
| +    static void makeEmptyArray(SkPdfNativeObject* obj) {
 | 
|          SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
 | 
|  
 | 
|          obj->fObjectType = kArray_PdfObjectType;
 | 
| -        obj->fArray = new SkTDArray<SkPdfObject*>();
 | 
| +        obj->fArray = new SkTDArray<SkPdfNativeObject*>();
 | 
|          // return (SkPdfArray*)obj;
 | 
|      }
 | 
|  
 | 
| -    bool appendInArray(SkPdfObject* obj) {
 | 
| +    bool appendInArray(SkPdfNativeObject* obj) {
 | 
|          SkASSERT(fObjectType == kArray_PdfObjectType);
 | 
|          if (fObjectType != kArray_PdfObjectType) {
 | 
|              // TODO(edisonn): report err
 | 
| @@ -340,35 +343,35 @@
 | 
|          return fArray->count();
 | 
|      }
 | 
|  
 | 
| -    SkPdfObject* objAtAIndex(int i) {
 | 
| +    SkPdfNativeObject* objAtAIndex(int i) {
 | 
|          SkASSERT(fObjectType == kArray_PdfObjectType);
 | 
|  
 | 
|          return (*fArray)[i];
 | 
|      }
 | 
|  
 | 
| -    SkPdfObject* removeLastInArray() {
 | 
| +    SkPdfNativeObject* removeLastInArray() {
 | 
|          SkASSERT(fObjectType == kArray_PdfObjectType);
 | 
|  
 | 
| -        SkPdfObject* ret = NULL;
 | 
| +        SkPdfNativeObject* ret = NULL;
 | 
|          fArray->pop(&ret);
 | 
|  
 | 
|          return ret;
 | 
|      }
 | 
|  
 | 
|  
 | 
| -    const SkPdfObject* objAtAIndex(int i) const {
 | 
| +    const SkPdfNativeObject* objAtAIndex(int i) const {
 | 
|          SkASSERT(fObjectType == kArray_PdfObjectType);
 | 
|  
 | 
|          return (*fArray)[i];
 | 
|      }
 | 
|  
 | 
| -    SkPdfObject* operator[](int i) {
 | 
| +    SkPdfNativeObject* operator[](int i) {
 | 
|          SkASSERT(fObjectType == kArray_PdfObjectType);
 | 
|  
 | 
|          return (*fArray)[i];
 | 
|      }
 | 
|  
 | 
| -    const SkPdfObject* operator[](int i) const {
 | 
| +    const SkPdfNativeObject* operator[](int i) const {
 | 
|          SkASSERT(fObjectType == kArray_PdfObjectType);
 | 
|  
 | 
|          return (*fArray)[i];
 | 
| @@ -376,11 +379,11 @@
 | 
|  
 | 
|  
 | 
|      // TODO(edisonn): make the functions to return SkPdfDictionary, move these functions in SkPdfDictionary
 | 
| -    static void makeEmptyDictionary(SkPdfObject* obj) {
 | 
| +    static void makeEmptyDictionary(SkPdfNativeObject* obj) {
 | 
|          SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
 | 
|  
 | 
|          obj->fObjectType = kDictionary_PdfObjectType;
 | 
| -        obj->fMap = new SkTDict<SkPdfObject*>(1);
 | 
| +        obj->fMap = new SkTDict<SkPdfNativeObject*>(1);
 | 
|          obj->fStr.fBuffer = NULL;
 | 
|          obj->fStr.fBytes = 0;
 | 
|      }
 | 
| @@ -392,7 +395,7 @@
 | 
|      // which will be used in code
 | 
|      // add function SkPdfFastNameKey key(const char* key);
 | 
|      // TODO(edisonn): setting the same key twike, will make the value undefined!
 | 
| -    bool set(const SkPdfObject* key, SkPdfObject* value) {
 | 
| +    bool set(const SkPdfNativeObject* key, SkPdfNativeObject* value) {
 | 
|          SkASSERT(fObjectType == kDictionary_PdfObjectType);
 | 
|          SkASSERT(key->fObjectType == kName_PdfObjectType);
 | 
|  
 | 
| @@ -407,11 +410,11 @@
 | 
|          return set(key->fStr.fBuffer, key->fStr.fBytes, value);
 | 
|      }
 | 
|  
 | 
| -    bool set(const char* key, SkPdfObject* value) {
 | 
| +    bool set(const char* key, SkPdfNativeObject* value) {
 | 
|          return set((const unsigned char*)key, strlen(key), value);
 | 
|      }
 | 
|  
 | 
| -    bool set(const unsigned char* key, size_t len, SkPdfObject* value) {
 | 
| +    bool set(const unsigned char* key, size_t len, SkPdfNativeObject* value) {
 | 
|          SkASSERT(fObjectType == kDictionary_PdfObjectType);
 | 
|  
 | 
|          if (fObjectType != kDictionary_PdfObjectType) {
 | 
| @@ -422,7 +425,7 @@
 | 
|          return fMap->set((const char*)key, len, value);
 | 
|      }
 | 
|  
 | 
| -    SkPdfObject* get(const SkPdfObject* key) {
 | 
| +    SkPdfNativeObject* get(const SkPdfNativeObject* key) {
 | 
|          SkASSERT(fObjectType == kDictionary_PdfObjectType);
 | 
|          SkASSERT(key->fObjectType == kName_PdfObjectType);
 | 
|  
 | 
| @@ -436,18 +439,18 @@
 | 
|          return get(key->fStr.fBuffer, key->fStr.fBytes);
 | 
|      }
 | 
|  
 | 
| -    SkPdfObject* get(const char* key) {
 | 
| +    SkPdfNativeObject* get(const char* key) {
 | 
|          return get((const unsigned char*)key, strlen(key));
 | 
|      }
 | 
|  
 | 
| -    SkPdfObject* get(const unsigned char* key, size_t len) {
 | 
| +    SkPdfNativeObject* get(const unsigned char* key, size_t len) {
 | 
|          SkASSERT(fObjectType == kDictionary_PdfObjectType);
 | 
|          SkASSERT(key);
 | 
|          if (fObjectType != kDictionary_PdfObjectType) {
 | 
|              // TODO(edisonn): report err
 | 
|              return NULL;
 | 
|          }
 | 
| -        SkPdfObject* ret = NULL;
 | 
| +        SkPdfNativeObject* ret = NULL;
 | 
|          fMap->find((const char*)key, len, &ret);
 | 
|  
 | 
|  #ifdef PDF_TRACE
 | 
| @@ -459,7 +462,7 @@
 | 
|          return ret;
 | 
|      }
 | 
|  
 | 
| -    const SkPdfObject* get(const SkPdfObject* key) const {
 | 
| +    const SkPdfNativeObject* get(const SkPdfNativeObject* key) const {
 | 
|          SkASSERT(fObjectType == kDictionary_PdfObjectType);
 | 
|          SkASSERT(key->fObjectType == kName_PdfObjectType);
 | 
|  
 | 
| @@ -473,18 +476,18 @@
 | 
|          return get(key->fStr.fBuffer, key->fStr.fBytes);
 | 
|      }
 | 
|  
 | 
| -    const SkPdfObject* get(const char* key) const {
 | 
| +    const SkPdfNativeObject* get(const char* key) const {
 | 
|          return get((const unsigned char*)key, strlen(key));
 | 
|      }
 | 
|  
 | 
| -    const SkPdfObject* get(const unsigned char* key, size_t len) const {
 | 
| +    const SkPdfNativeObject* get(const unsigned char* key, size_t len) const {
 | 
|          SkASSERT(fObjectType == kDictionary_PdfObjectType);
 | 
|          SkASSERT(key);
 | 
|          if (fObjectType != kDictionary_PdfObjectType) {
 | 
|              // TODO(edisonn): report err
 | 
|              return NULL;
 | 
|          }
 | 
| -        SkPdfObject* ret = NULL;
 | 
| +        SkPdfNativeObject* ret = NULL;
 | 
|          fMap->find((const char*)key, len, &ret);
 | 
|  
 | 
|  #ifdef PDF_TRACE
 | 
| @@ -496,8 +499,8 @@
 | 
|          return ret;
 | 
|      }
 | 
|  
 | 
| -    const SkPdfObject* get(const char* key, const char* abr) const {
 | 
| -        const SkPdfObject* ret = get(key);
 | 
| +    const SkPdfNativeObject* get(const char* key, const char* abr) const {
 | 
| +        const SkPdfNativeObject* ret = get(key);
 | 
|          // TODO(edisonn): / is a valid name, and it might be an abreviation, so "" should not be like NULL
 | 
|          // make this distiontion in generator, and remove "" from condition
 | 
|          if (ret != NULL || abr == NULL || *abr == '\0') {
 | 
| @@ -506,8 +509,8 @@
 | 
|          return get(abr);
 | 
|      }
 | 
|  
 | 
| -    SkPdfObject* get(const char* key, const char* abr) {
 | 
| -        SkPdfObject* ret = get(key);
 | 
| +    SkPdfNativeObject* get(const char* key, const char* abr) {
 | 
| +        SkPdfNativeObject* ret = get(key);
 | 
|          // TODO(edisonn): / is a valid name, and it might be an abreviation, so "" should not be like NULL
 | 
|          // make this distiontion in generator, and remove "" from condition
 | 
|          if (ret != NULL || abr == NULL || *abr == '\0') {
 | 
| @@ -758,7 +761,7 @@
 | 
|          double array[4];
 | 
|          for (int i = 0; i < 4; i++) {
 | 
|              // TODO(edisonn): version where we could resolve references?
 | 
| -            const SkPdfObject* elem = objAtAIndex(i);
 | 
| +            const SkPdfNativeObject* elem = objAtAIndex(i);
 | 
|              if (elem == NULL || !elem->isNumber()) {
 | 
|                  // TODO(edisonn): report error
 | 
|                  return SkRect::MakeEmpty();
 | 
| @@ -781,7 +784,7 @@
 | 
|          double array[6];
 | 
|          for (int i = 0; i < 6; i++) {
 | 
|              // TODO(edisonn): version where we could resolve references?
 | 
| -            const SkPdfObject* elem = objAtAIndex(i);
 | 
| +            const SkPdfNativeObject* elem = objAtAIndex(i);
 | 
|              if (elem == NULL || !elem->isNumber()) {
 | 
|                  // TODO(edisonn): report error
 | 
|                  return SkMatrix::I();
 | 
| @@ -862,6 +865,29 @@
 | 
|          }
 | 
|      }
 | 
|  
 | 
| +    static void append(SkString* str, const char* data, size_t len, const char* prefix = "\\x") {
 | 
| +        for (unsigned int i = 0 ; i < len; i++) {
 | 
| +            if (data[i] == kNUL_PdfWhiteSpace) {
 | 
| +                str->append(prefix);
 | 
| +                str->append("00");
 | 
| +            } else if (data[i] == kHT_PdfWhiteSpace) {
 | 
| +                str->append(prefix);
 | 
| +                str->append("09");
 | 
| +            } else if (data[i] == kLF_PdfWhiteSpace) {
 | 
| +                str->append(prefix);
 | 
| +                str->append("0A");
 | 
| +            } else if (data[i] == kFF_PdfWhiteSpace) {
 | 
| +                str->append(prefix);
 | 
| +                str->append("0C");
 | 
| +            } else if (data[i] == kCR_PdfWhiteSpace) {
 | 
| +                str->append(prefix);
 | 
| +                str->append("0D");
 | 
| +            } else {
 | 
| +                str->append(data + i, 1);
 | 
| +            }
 | 
| +        }
 | 
| +    }
 | 
| +
 | 
|      SkString toString(int firstRowLevel = 0, int level = 0) {
 | 
|          SkString str;
 | 
|          appendSpaces(&str, firstRowLevel);
 | 
| @@ -884,7 +910,7 @@
 | 
|  
 | 
|              case kString_PdfObjectType:
 | 
|                  str.append("\"");
 | 
| -                str.append((const char*)fStr.fBuffer, fStr.fBytes);
 | 
| +                append(&str, (const char*)fStr.fBuffer, fStr.fBytes);
 | 
|                  str.append("\"");
 | 
|                  break;
 | 
|  
 | 
| @@ -898,11 +924,11 @@
 | 
|  
 | 
|              case kName_PdfObjectType:
 | 
|                  str.append("/");
 | 
| -                str.append((const char*)fStr.fBuffer, fStr.fBytes);
 | 
| +                append(&str, (const char*)fStr.fBuffer, fStr.fBytes, "#");
 | 
|                  break;
 | 
|  
 | 
|              case kKeyword_PdfObjectType:
 | 
| -                str.append((const char*)fStr.fBuffer, fStr.fBytes);
 | 
| +                append(&str, (const char*)fStr.fBuffer, fStr.fBytes);
 | 
|                  break;
 | 
|  
 | 
|              case kArray_PdfObjectType:
 | 
| @@ -919,8 +945,8 @@
 | 
|                  break;
 | 
|  
 | 
|              case kDictionary_PdfObjectType: {
 | 
| -                    SkTDict<SkPdfObject*>::Iter iter(*fMap);
 | 
| -                    SkPdfObject* obj = NULL;
 | 
| +                    SkTDict<SkPdfNativeObject*>::Iter iter(*fMap);
 | 
| +                    SkPdfNativeObject* obj = NULL;
 | 
|                      const char* key = NULL;
 | 
|                      str.append("<<\n");
 | 
|                      while ((key = iter.next(&obj)) != NULL) {
 | 
| @@ -934,7 +960,7 @@
 | 
|                          size_t length = 0;
 | 
|                          if (GetFilteredStreamRef(&stream, &length)) {
 | 
|                              str.append("stream\n");
 | 
| -                            str.append((const char*)stream, length > 256 ? 256 : length);
 | 
| +                            append(&str, (const char*)stream, length > 256 ? 256 : length);
 | 
|                              str.append("\nendstream");
 | 
|                          } else {
 | 
|                              str.append("stream STREAM_ERROR endstream");
 | 
| @@ -964,15 +990,15 @@
 | 
|      }
 | 
|  
 | 
|  private:
 | 
| -    static void makeStringCore(const unsigned char* start, SkPdfObject* obj, ObjectType type) {
 | 
| +    static void makeStringCore(const unsigned char* start, SkPdfNativeObject* obj, ObjectType type) {
 | 
|          makeStringCore(start, strlen((const char*)start), obj, type);
 | 
|      }
 | 
|  
 | 
| -    static void makeStringCore(const unsigned char* start, const unsigned char* end, SkPdfObject* obj, ObjectType type) {
 | 
| +    static void makeStringCore(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj, ObjectType type) {
 | 
|          makeStringCore(start, end - start, obj, type);
 | 
|      }
 | 
|  
 | 
| -    static void makeStringCore(const unsigned char* start, size_t bytes, SkPdfObject* obj, ObjectType type) {
 | 
| +    static void makeStringCore(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj, ObjectType type) {
 | 
|          SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
 | 
|  
 | 
|          obj->fObjectType = type;
 | 
| @@ -985,20 +1011,20 @@
 | 
|      bool applyDCTDecodeFilter();
 | 
|  };
 | 
|  
 | 
| -class SkPdfStream : public SkPdfObject {};
 | 
| -class SkPdfArray : public SkPdfObject {};
 | 
| -class SkPdfString : public SkPdfObject {};
 | 
| -class SkPdfHexString : public SkPdfObject {};
 | 
| -class SkPdfInteger : public SkPdfObject {};
 | 
| -class SkPdfReal : public SkPdfObject {};
 | 
| -class SkPdfNumber : public SkPdfObject {};
 | 
| +class SkPdfStream : public SkPdfNativeObject {};
 | 
| +class SkPdfArray : public SkPdfNativeObject {};
 | 
| +class SkPdfString : public SkPdfNativeObject {};
 | 
| +class SkPdfHexString : public SkPdfNativeObject {};
 | 
| +class SkPdfInteger : public SkPdfNativeObject {};
 | 
| +class SkPdfReal : public SkPdfNativeObject {};
 | 
| +class SkPdfNumber : public SkPdfNativeObject {};
 | 
|  
 | 
| -class SkPdfName : public SkPdfObject {
 | 
| -    SkPdfName() : SkPdfObject() {
 | 
| -        SkPdfObject::makeName((const unsigned char*)"", this);
 | 
| +class SkPdfName : public SkPdfNativeObject {
 | 
| +    SkPdfName() : SkPdfNativeObject() {
 | 
| +        SkPdfNativeObject::makeName((const unsigned char*)"", this);
 | 
|      }
 | 
|  public:
 | 
| -    SkPdfName(char* name) : SkPdfObject() {
 | 
| +    SkPdfName(char* name) : SkPdfNativeObject() {
 | 
|          this->makeName((const unsigned char*)name, this);
 | 
|      }
 | 
|  };
 | 
| 
 |